2011-10-29 4 views
3

아래 질문.다중 레벨 배열에서 데이터 가져 오기

이것은 Pixeler의 대답을 기반으로 한 해결책입니다.

<?php 
$i = 0; 
foreach ($array as $k1 => $v1) { 
     if (is_array($v1)) { 
      echo $k1."<br />"; 
       foreach ($v1 as $k2 => $v2) { 
        echo "--".$k2."<br />----".$v2."<br />"; 
       } 
      $i++; 
     } 
     echo "<br /<br />"; 
} 
?> 

<?php 
$array = array("Apples" => array("Red" => "$2.95", "Green" => "$2.45"), 
       "Oranges" => array("Navel" => "$4.95"), 
       "Grapes" => array("Purple" => "$3.75", "Green" => "$3.25") 
      ); 
?> 

은 위에서 무엇 걸릴 수를 호출하여 각각의 값에 대한 텍스트를 얻을 수 있습니까? ? 가 어떻게 ... 이런 일을 할 수

<?php 
echo $array[0]; 
//Outputs "Apples" 

echo $array[0][0]; 
//Outputs "Red" 

echo $array[0][0][0]; 
//Outputs "$2.95" 

echo $array[3][2][1]; 
//Outputs "$3.25" (Grapes > Green > Price) 
?> 

편집 : 아이디어는 내가 첫 번째 수준 (사과, 오렌지, 포도), 두 번째 수준을 반환 할 수 있다는 것입니다 (빨강, 녹색, 배꼽, 자주색, 녹색) 및 세 번째 수준 ($ 2.95, $ 2.45, $ 4.95, $ 3.75, $ 3.25)으로 전화를 걸 수 있습니다.

예를 들어, 나는 이런 식으로 뭔가를 할 :

<?php 

count($array); //returns 3 (Apples, Oranges, Grapes) 

//Do some for/foreach function that will produce the following: 

//Apples 
//->Red: $2.95 
//->Green: $2.45 
//Oranges 
//->Navel: $4.95 
//Grapes 
//Purple: $3.75 
//Green: $3.25 

//I'm hoping to structure the code like this: 

foreach($i = 0; $i =< count($array); $i++){ 
    //echo title of array (Apples) 
    //echo each child key and it's value (Red: $2.95; Green: $2.45) 

    foreach($secondcounter = 0; $secondcounter =< count($array[$i]); $secondcounter++){ 
     echo array_key($array[$i][$secondcounter]) . ": " .$array[$i][$secondcounter]; 
     //Note: I don't actually know if array_key does the trick or not, it's meant to return "Red" in this case, while the non array_key()'d is meant to return the price of red apples, $2.95 
} 

?> 

편집 : 그것은 내가 데이터를 호출하는 단어를 사용할 수 없으므로주의하는 것이 중요하다. 사과는 데이터베이스에서로드하는 데이터 행에 따라 변경 될 수 있으므로 배열의 첫 번째 항목을 호출하려면 숫자 [0]를 사용해야합니다. 다른 말로하면 ... 사과는 실제로 책이 될 수 있고, 레드는 책 => 가격의 이름으로 판명 될 수 있습니다.

나는이 함수에 지나치게 익숙하지는 않지만 serialize/unserialize를 사용하여 데이터베이스에서 데이터를 저장하고 검색하려고합니다. 사용법을 간략하게 살펴 보았지만 사용하기 쉽습니다.


나는 몇 시간 동안 연구를 해왔지만 아무것도 찾을 수 없다. 텍스트가 아닌 숫자로 데이터를 호출 할 수 있어야합니다. 따라서 $ array [ "사과"]는 받아 들일 수 없습니다.

또한 json_decode를 살펴보고 serialize/unserialize를했는데 간단한 모양에서 기본 아이디어를 얻었을 것이라고 생각하지만 위의 데이터를 호출하는 방법을 이해하는 것이 중요하다고 생각합니다. 예. 어떤 도움이라도 정말 좋을 것입니다.

+0

그래서 숫자 배열과 같은 배열을 사용하고 싶지만 예제의 개수는 무엇인지 알고 싶습니다. 'Grapes -> Purle'입니까? 또한 이러한 배열을 데이터베이스에 보관하려면'serialize' 및'unserialize'를 사용하는 것이 좋습니다. – Revenant

+0

그래, 그렇게 생각해. "사과", "빨강", "$ 2.95"등 모든 단어를 반환 할 수 있기를 바랍니다. 하지만 숫자를 사용하여 모든 값을 반환 할 수 있기를 원합니다. –

+0

나는 당신이하고 싶은 것을 다시 생각해야 할 것입니다. 관련 배열과 숫자 배열을 사용하여 mysql에서 데이터를 가져 오는 것이 더 쉽지는 않을 것입니다. 당신은 그들 모두를 가질 것이고 당신이 원하는대로 할 수 있습니다. 다른 방법으로는, 여러 배열을 만들고, 비교하고, 인덱스 번호 등을 찾아야합니다. 등등. 많은 줄을 코딩하여 작성하게 될 것입니다. – Revenant

답변

0

어떨까요?

array_search("Apples",array_keys($array)); 

당신이 루프에 배열 한 가지 방법을 원하는 경우 또는 다른 당신은 기존의 배열을 통해 새로운 배열, 루프를 생성하고 새로운 숫자 배열 배열을 만들어야 할 수도 있습니다?


$array = array("Apples" => array("Red" => "$2.95", "Green" => "$2.45"), 
       "Oranges" => array("Navel" => "$4.95"), 
       "Grapes" => array("Purple" => "$3.75", "Green" => "$3.25") 
      ); 

$newArray = array(); 
$i = 0; 
foreach ($array as $key => $value) { 
if (is_array($value)) { 
    $newArray[$i] = array(); 
    foreach ($value as $k => $v) { 
    $newArray[$i][] = $v; 
    } 
    $i++; 
} 
} 

echo '<pre>'; 
var_dump($newArray); 
echo '</pre>'; 

echo $newArray[0][0]; 

첫 번째 방법


$array = array("Apples" => array("Red" => "$2.95", "Green" => "$2.45"), 
       "Oranges" => array("Navel" => "$4.95"), 
       "Grapes" => array("Purple" => "$3.75", "Green" => "$3.25") 
      ); 

$newArray = array(); 
foreach ($array as $value) { 
    $newArray[] = (is_array($value)) ? array_values($value) : $value; 
} 

echo '<pre>'; 
var_dump($newArray); 
echo '</pre>'; 

두 번째 방법은 분명히 나는 ​​첫 번째 방법을 추천합니다.

+0

완벽 할 수는 있지만 사과는 여러 가지 다른 것으로 바뀔 수 있습니다. 그래서 번호로 전화해야합니다. –

+0

명확히하기 위해 질문을 업데이트하고 있습니다. 죄송합니다. –

+0

기다리십시오. 업데이트를 읽고 있습니다. 나는 이것을 시험해 보겠다. –

1

이것은 @ Pixeler의 대답을 기반으로 한 해결책입니다.

<?php 
$i = 0; 
foreach ($array as $k1 => $v1) { 
     if (is_array($v1)) { 
      echo $k1."<br />"; 
       foreach ($v1 as $k2 => $v2) { 
        echo "--".$k2."<br />----".$v2."<br />"; 
       } 
      $i++; 
     } 
     echo "<br /<br />"; 
} 
?>