2011-10-29 70 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]來調用數組中的第一項,因爲Apples可能會根據我從數據庫加載的數據行進行更改。換句話說,蘋果實際上可能是書籍,而紅色可能會成爲書本的名字=>價格。

我打算使用serialize/unserialize來存儲和檢索數據庫中的數據,雖然我不太熟悉這些函數,但我簡要介紹了它們,並且它們似乎相當容易使用。


我一直在研究幾個小時,但無法找到任何東西。 重要的是,我可以通過數字調用數據,而不是文本。所以$ array [「Apples」]是不可接受的。

我也看了一下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(); 
foreach ($array as $value) { 
    $newArray[] = (is_array($value)) ? array_values($value) : $value; 
} 

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

第二種方式


$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]; 

很顯然,我會推薦第一種方式。

+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 />"; 
} 
?>