【问题标题】:php how to loop through a multi dimensional arrayphp如何循环遍历一个多维数组
【发布时间】:2011-09-08 17:24:08
【问题描述】:

我正在尝试创建一个动态导航列表,其中包含列表中每个项目的子列表

我有 1 个包含 12 个父类别值的数组,是一个简单的一维数组。

我正在使用 foreach 循环遍历它以创建一个无序列表

我遇到的问题是我有一个子类别数组,它是一个多维数组,我需要为属于父类别的每个子类别创建一个嵌套列表。

<?php
//mysql query to get the parent categories  
$query  = "SELECT `parent` FROM `categories` GROUP BY `parent`";
$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)) {
    $cat[] = $row['parent']; //define the parent categories as a variable
}?>

<div id="navigation">
    <ul>
        <li><a href="http://localhost/softwarereviews.com">Home</a></li>
        <?php
        //loop through the parent categories
        foreach ($cat as $parent) {

            //another query to get the child categories that belong to each parent category
            $query = "SELECT * FROM `categories` WHERE `parent` = '$parent'";
            $result = mysql_query($query)
                or die(mysql_error());

            while ($row = mysql_fetch_assoc($result)) {
                //need 2 results so create a multi - dimensional array 
                $children[] = array($row['name'] => $row['cat_label']);

            }?>
            <li><?php echo $parent; ?></li>
            <ul>
                <?php foreach ($children as $key => $value) { ?>

                <?php foreach ($value as $key => $value) { ?>

                    <li><a href="<?php echo $value;?>"><?php echo $key;?></a><li>

                <?php }
            }?>
            </ul>
            <?php }?>
    </ul>
</div>

此时发生的是每个类别的子列表不断追加之前的列表结果,使得每个子列表的结果越来越大。

【问题讨论】:

  • 您不应该在第二次使用 $key => $value !这非常令人困惑并且容易出错!至少将它们命名为 $key2 => $value2

标签: php foreach


【解决方案1】:

foreach 循环内初始化$children

foreach ($cat as $parent) { 
    $children = array();
    ...

【讨论】:

    【解决方案2】:

    如果你有一个简单数组

    foreach($rows as $row){
        $row[0];
        $row['myKey'];
    }
    

    如果您有多维数组,但该数组可以有唯一的行,请执行此操作

    // foreach((condition)? true:false as child){ ... }
    foreach((is_array($rows[0]))? $rows : array('0'=>$rows) as $row){
        $row[0];
        $row['myKey'];
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 2011-01-02
      • 2016-02-16
      • 2021-09-17
      • 1970-01-01
      • 2012-03-07
      • 2010-10-24
      相关资源
      最近更新 更多