首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >循环通过php多级关联数组

循环通过php多级关联数组
EN

Stack Overflow用户
提问于 2016-12-19 21:17:44
回答 4查看 1.8K关注 0票数 3

我正在努力从多维数组的所有层返回值,例如,值,然后是所有子元素。我尝试了很多循环,但都不能完全正确。请谁来帮帮忙--我被困了好久了!谢谢。

该数组为:

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

回答 4

Stack Overflow用户

发布于 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;
}

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

票数 3
EN

Stack Overflow用户

发布于 2016-12-19 22:09:28

如果您的数组具有恒定的层数,则可以对每一层使用foreach-function。如果你的数组每次都有不同的层数,你应该使用递归,因为在你的情况下这是唯一的解决方案。

如下所示:

array_walk_recursive($array, function($item, $key){
    //your actions
});
票数 0
EN

Stack Overflow用户

发布于 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++;

};

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41223476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档