2014-04-04 109 views
0

我想在不使用foreach的情況下獲取最內層數組的值。如何獲得$ f5和$ v5的值而不循環? .................................................. ..........................................嵌套數組中的最內部值

<?php 
// json_arrays.php 
// 
$json1 = '{"upload":[{"email":"[email protected]","deviceid":"1234567", 
"crecs":[{"id":"RUS","name":"Russa"}, 
{"id":"AUS","name":"Austria"}, 
{"id":"USA","name":"United States"}]}]}'; 
// 
echo "<br> ------- <br>"; 
var_dump(json_decode($json1, true)); 
echo "<br> ------- <br>"; 
var_dump(json_decode($json1)); 
echo "<br> ------- <br>"; 
$a1 = json_decode($json1, true); 
// 
foreach ($a1 as $f1 => $v1) { 
if ($f1 == "upload") { 
    $a2 = $v1; 
    foreach ($a2 as $f2 => $v2) { 
     $a3 = $v2; 
     foreach ($a3 as $f3 => $v3) { 
      echo "key: ".$f3."<br>"; 
      echo "value: ".$v3."<br>"; 
      if ($f3 == "crecs") { 
       $a4 = $v3; 
       echo " ------- <br>"; 
       echo "[vardump a4]"."<br>"; 
       var_dump($a4); 
       echo "<br> ------- <br>"; 
       foreach ($a4 as $f4 => $v4) { 
        $a5 = $v4; 
        foreach ($a5 as $f5 => $v5) { 
         echo "key: ".$f5."<br>"; 
         echo "value: ".$v5."<br>"; 
        } 
       } 
      } 
     } 
    } 
} 
} 
?> 
+0

如果你沒有遍歷所有的可能性,你會錯過大部分'echo'命令。我們可以假設他們只是在那裏進行調試,而你實際上並不需要它們嗎?我的PHP有點生疏,但是你可以用'$ v1 = $ a1 [「來替換'foreach($ a1 as $ f1 => $ v1 {if($ f1 ==」upload「){...}}'上傳「]; ...,或類似的東西,然後對''crecs''執行相同的操作,對於其他循環,我假設你確實需要遍歷所有這些循環,因爲你沒有' t表示你感興趣的元素 –

+0

你是對的,echo cmds只用於調試,我問:「如何獲得$ f5和$ v5的值而不循環?」。我希望能夠使用像$ a [2] [1] [0] [0] [0/1/2]之類的東西?從您的答案看來,PHP不支持這一點?謝謝, – JohnD

+0

不,我不是說PHP是有缺陷的,如果你願意,你可以寫'$ a [2] [1] [0] [0] [0/1/2]'我以爲你不知道你想要什麼值鍵,因爲你只在代碼中列出了''upload''和''crecs'',但是如果你知道所有的值,那麼你沒有理由不能這麼做。 –

回答

1

你可以嘗試遞歸地進行。還沒有嘗試過,但我認爲這是失敗的。

function get_last_child_recursive($array) 
{ 
    if(is_array(end($array)) 
     return get_last_child_recursive(end($array)); 
    else 
     return array('last_value'=>end($array),'last_key'=>key($array)); 

} 

由於子陣列的每個父可以使用端的免得元件(),以檢查是否該元素是一個數組,如果是 - 遞歸 - 如果不是返回從最後一個值和最後一個鍵陣列。必須先返回通知值,以將指針移至數組的末尾以返回正確的鍵(more info on that)。沒有測試過,所以它可能無法正常工作,不過這是一個很好的開始。

+0

這使得感。我還需要獲取最後一個數組中的所有數組鍵/值對。看看我能否得到這個工作並仍然使用這個功能會很有趣。謝謝 – JohnD

+0

這似乎給了一個解決方案〜> http://stackoverflow.com/questions/9937137/implode-an-inner-array-values?rq=1 – JohnD

+0

@JohnD當然。在else塊中,只需返回'$ array'而不是現在返回的內容。 – Bryan