简体   繁体   English

如何遍历此多维数组?

[英]How can I loop over this multi dimensional array?

So Im trying to loop over an array of categories and sub-categories but Im having trouble with the foreach loop . 所以我试图遍历一系列categoriessub-categories但是我遇到了foreach loop麻烦。 Once I've got the array working Im going to create a menu where if you hover over a category, sub categories appear. 一旦数组工作完毕,我将创建一个菜单,如果您将鼠标悬停在某个类别上,则会显示子类别。

Put it this way, Im hopeless at the logic side of things :| 这么说吧,我在逻辑上没有希望:| This is my array along with the loops I've tried: 这是我的数组以及尝试过的循环:

$categories = array(
        'arr' => array(
           'cat'=>'sport',
           'subcats'=> array(
               "surfing", "basketball", "nfl", "afl"
            )
        ),
        'arr' => array(
           'cat'=>'Automotive',
           'subcats'=> array(
               "cars", "f1", "bikes", "etc"
            )
        ),
        'arr' => array(
           'cat'=>'comedy',
           'subcats'=> array(
               "stand up", "pranks", "...", "test"
            )
        )

  );


  //Loop1
  foreach ($categories as $key => $value) {
        if($key == "arr"){
            foreach ($key as $key => $value) {
                echo $value;
                if($key == "cat"){
                    echo "cat";
                }
                else{
                    echo $value;
                }
            }
            // echo $key . "<br />";
            // if($key == 'subcats'){
            // echo "________".$key."<br />";
            // }
        }
    }


    //Attempt number 2
    foreach ($categories as $key => $value) {
        if($key == "arr"){
            while($key){
                echo $value;
                if($key == "cat"){
                    echo $value;
                }
                if($key == "subcats"){
                    while($key){
                        echo $value[$key];
                    }
                }
            }
        }
    }

Updated code that I tried after this 我在此之后尝试的更新代码

This works okay but only problem is that it will only loop through the last arr=>array() and not any of the ones before. 这样做可以,但是唯一的问题是它只会循环访问最后一个arr=>array()而不会循环遍历任何一个。

$i=0;
    foreach ($categories as $key => $value) {
    if($key == "arr"){
        foreach ($categories['arr'] as $sub => $val) {
            if($sub == "cat"){
                echo $val . " => ";
            }
            else if($sub == "subcats"){
                for($i=0; $i<4; $i++){
                    echo $val[$i] . ", ";
                }
            }
        }
    }
}

If you can reorganize your array, you can stick the categories as keys, subcategories as values: 如果可以重组数组,则可以将类别作为键,将子类别作为值:

$categories = array(
        'sport' => array(
               "surfing", "basketball", "nfl", "afl"
        ),
        'Automotive' => array(
               "cars", "f1", "bikes", "etc"
        ),
        'comedy' => array(
               "stand up", "pranks", "...", "test"
            )
  );
 // Here is an imploded list, you don't need a second loop then
 foreach($categories as $cat => $subcat) {
        echo "<h1>".$cat."</h1>";
        echo '<ul>';
        echo '<li>'.implode('</li>'.PHP_EOL.'<li>',$subcat).'</li>';
        echo '</ul>';
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM