Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环通过php多级关联数组_Php_Arrays_Loops_Foreach - Fatal编程技术网

循环通过php多级关联数组

循环通过php多级关联数组,php,arrays,loops,foreach,Php,Arrays,Loops,Foreach,我正在努力从多维数组的所有层返回值,例如,先返回值,然后返回所有子元素。我试过很多循环,但都做不好。有人能帮我吗?我已经被困很久了!多谢各位 阵列是: Array ( [SiteRep] => Array ( [DV] => Array ( [Location] => Array (

我正在努力从多维数组的所有层返回值,例如,先返回值,然后返回所有子元素。我试过很多循环,但都做不好。有人能帮我吗?我已经被困很久了!多谢各位

阵列是:

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++;
};
$i=0;
foreach($json_将['SiteRep']['DV']['Location']['Period'][$i]解码为$key=>$value){
if(是_数组($value)){
foreach($key2=>$value2的值){
if(是_数组($value2)){
foreach($value2作为$key3=>$value3){
echo$key3.“3:”.$value3.“
”; } }否则{ echo$key2.“2:”.$value2.“
”; } }; }否则{ 回显$key.“1:”.$value.“
”; } $i++; };
我相信您正在寻找递归。调用自身的函数。这可能很棘手,但它是迄今为止在深度不确定的数组中导航最有效的方法

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;
}

注意:递归可能会导致内存不足,如果没有像无限循环一样正确设置,因为递归函数调用每次都将函数调用推送到调用堆栈上。只需确保您的函数调用传递了参数的子集。

如果您的数组具有恒定的层数,则可以对每个层使用foreach函数。如果您的数组每次都有不同数量的层,那么您应该使用递归,因为它是您的情况下唯一的解决方案

大概是这样的:

array_walk_recursive($array, function($item, $key){
    //your actions
});

我一直在深入研究,通过使用

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++;
foreach($json_将['SiteRep']['DV']['Location']['Period']解码为$key=>$value){
if(是_数组($value)){
foreach($key2=>$value2的值){
if(是_数组($value2)){
foreach($value2作为$key3=>$value3){
foreach($value3作为$key4=>$value4){
echo$key4.:“$value4.”
“; } } }否则{ echo$key2.:“$value2.”
“; } }; }否则{ 回声$key.:“$value.”
“; } $i++;

})

这可以递归地映射数组。它们保存密钥和结构。 但是,您只能返回一个新值,而不能更改键。但是你会知道你在看哪个键,如果你只是想回应它,你可以这样做

array_map_assoc_recursive('callback', $array)

function callback($key, $value) {
    return "new" . $value;
}


function array_map_assoc_recursive($f, array $a) {
    return array_column(array_map(function ($key, $value) use ($f) {
        if (is_array($value)) {
            return [$key, array_map_assoc_recursive($f, $value)];
        } else {
            return [$key, call_user_func($f, $key, $value)];
        }
    }, array_keys($a), $a), 1, 0);
}

谢谢在我目前的水平上看起来很复杂。我将围绕递归函数做一些研究