我正在努力从多维数组的所有层返回值,例如,值,然后是所有子元素。我尝试了很多循环,但都不能完全正确。请谁来帮帮忙--我被困了好久了!谢谢。
该数组为:
Array
(
[SiteRep] => Array
( [DV] => Array
(
[Location] => Array
(
[Period] => Array
(
[0] => Array
(
[value] => 2016-12-19Z
[Rep] => Array
(
[0] => Array
(
[D] => W
[F] => 1
[G] => 9
)
[1] => Array
(
[D] => W
[F] => 0
[G] => 7
)
)
)
[1] => Array
(
[value] => 2016-12-20Z
[Rep] => Array
(
[0] => Array
(
[D] => ENE
[F] => 4
[G] => 7
)
[1] => Array
(
[D] => E
[F] => 3
[G] => 9
)
到目前为止我的代码是:
$i=0;
foreach ($json_decoded['SiteRep']['DV']['Location']['Period'][$i] as $key => $value) {
if (is_array($value)){
foreach ($value as $key2 => $value2){
if (is_array($value2)){
foreach ($value2 as $key3 => $value3) {
echo $key3 . " 3: " . $value3 . "<br>";
}
} else {
echo $key2 . " 2: " . $value2 . "<br>";
}
};
} else {
echo $key . " 1: " . $value . "<br>";
}
$i++;
};
发布于 2016-12-19 21:28:10
我相信你在寻找递归。调用自身的函数。这可能很棘手,但它是迄今为止导航不确定深度数组的最有效方法。
function printStuff($stuff)
{
echo $stuff['value']
if (isset($stuff['rep']))
{
printStuff($stuff['rep']);
}
}
如果希望值向下传递,只需将echo更改为返回值:
function printStuff($stuff)
{
$temp = $stuff['value']
if (isset($stuff['rep']))
{
$temp .= printStuff($stuff['rep']);
}
return $temp;
}
注意:如果没有正确设置,递归可能会导致内存不足,类似于无限循环,因为递归函数调用每次都会将函数调用推入调用堆栈。只需确保您的函数调用传入了参数的一个子集。
发布于 2016-12-19 22:09:28
如果您的数组具有恒定的层数,则可以对每一层使用foreach-function。如果你的数组每次都有不同的层数,你应该使用递归,因为在你的情况下这是唯一的解决方案。
如下所示:
array_walk_recursive($array, function($item, $key){
//your actions
});
发布于 2016-12-19 23:32:50
我继续向下钻取,并设法通过使用...
foreach ($json_decoded['SiteRep']['DV']['Location']['Period'] as $key => $value) {
if (is_array($value)){
foreach ($value as $key2 => $value2){
if (is_array($value2)){
foreach ($value2 as $key3 => $value3) {
foreach ($value3 as $key4 => $value4) {
echo $key4 . ": " . $value4 . "<br>";
}
}
} else {
echo $key2 . ": " . $value2 . "<br>";
}
};
} else {
echo $key . ": " . $value . "<br>";
}
$i++;
};
https://stackoverflow.com/questions/41223476
复制相似问题