2014-04-04 62 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