我想在不使用foreach的情况下获取最内层数组的值。如何在没有循环的情况下获得$ f5和$ v5的值? .................................................. ..........................................
<?php
// json_arrays.php
//
$json1 = '{"upload":[{"email":"jd@gmail.com","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 :(得分:2)
您可以尝试递归执行此操作。 Haven没试过,但我认为这个为你做了。
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));
}
由于子数组是每个父元素的最小元素,因此您可以使用end()来检查该元素是否为数组(如果是 - recurse) - 如果不返回数组中的最后一个值和最后一个键。必须首先返回通知值,以将指针移动到数组的末尾以返回正确的键(more info on that)。 Haven没有测试过这个,所以它可能不起作用,但无论如何它都是一个好的开始。