在php中使用foreach语句管理一个4维或5维的数组。

问题描述 投票:2回答:1

我现在很不爽,因为网上大家都在说PHP支持两层、三层、四层、五层或更深的多维数组。但是,对于大多数人来说,三层以上深度的数组是很难管理的。所以我找不到人帮我。

下面举一个很简单的例子

  $documents = array(
    array(
         "name"=>"Markos",
        "lastname"=>"papadopoulos",
        "country"=>"Greece",
        "nationality"=>"greek",
        "job"=>"web developer",
        "hobbies"=>array(
                "sports"=>"boxing",
                "others"=>array(
                        "freetime"=>"watching Tv"
                )
        )

    )
);

foreach($documents as $document){
    echo $document['name']."<br>"
        .$document['lastname']."<br>"
        .$document['country']."<br>"
        .$document['nationality']."<br>"
        .$document['job']."<br>";

            foreach ($document['hobbies'] as $key=>$value){
                echo $key." ".$value."<br>";

                    foreach ($value['others'] as $subkey=>$subvalue){
                        echo $subkey['freetime'];
                    }

                }
}

我被卡住了,我无法显示出 "others"=>array("freetime"=>"watching tv") 谁能给我建议?如果我也有另一个数组在 "others"=>array("freetime"=>"watching tv"),我怎么能把这个数组显示出来呢?我正在努力学习其中的逻辑。

php arrays multidimensional-array
1个回答
2
投票

在PHP中。foreach 实际上有两种语法。

  1. foreach($array as $element) 这可能意味着 $element 最终成为一个数组
  2. foreach($array as $key => $value) 这意味着 key 永远不会是一个数组,它是什么键,所以你在 => 在您的数组中,而 $value 可以是一个数组。

这是遵循第一种语法的方法,注意你甚至不必嵌套 foreach 在这里,正如 @Nathanael的评论 你的数组中的内容大多是标量,不是真正的嵌套数组。

foreach($documents as $document){
  echo $document['name']."<br>".
    $document['lastname']."<br>".
    $document['country']."<br>".
    $document['nationality']."<br>".
    $document['job']."<br>".
    $document['job']."<br>".
    $document['hobbies']['sports']."<br>".
    $document['hobbies']['others']['freetime'];
}

如果你想采用第二种语法,那么最好是做一个 递归:

function display_multi_level_array($array) {
  foreach($array as $key => $value){
    if(is_array($value)) {
       display_multi_level_array($value);
       continue;
    }

    echo $key." ".$value."<br>";
  } 
}

display_multi_level_array($documents);

2
投票

试试

foreach($documents as $document){
echo $document['name']."<br>"
    .$document['lastname']."<br>"
    .$document['country']."<br>"
    .$document['nationality']."<br>"
    .$document['job']."<br>";

        foreach ($document['hobbies'] as $key=>$value){
            if (is_array($value)) {
                foreach ($value as $subkey=>$subvalue){
                    echo $subvalue;
                }
            } else {
                echo $key." ".$value."<br>";
            }
        }
}

2
投票
foreach ($documents as $key) {
echo $key['name']. '<br>';
echo $key['lastname']. '<br>';
echo $key['country']. '<br>';
echo $key['nationality']. '<br>';
echo $key['job']. '<br>';
echo $key['hobbies']['sports']. '<br>';
echo $key['hobbies']['others']['freetime']. '<br>';
}

输出将是MarkospapadopoulosGreecekweb developerboxingwatching Tv。

© www.soinside.com 2019 - 2024. All rights reserved.