PHP, как пройти через многомерный массив - PullRequest
1 голос
/ 08 сентября 2011

Я пытаюсь создать динамический список навигации, у которого есть подсписок для каждого из элементов в списке

У меня есть 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>

В настоящий момент происходит то, что подсписок каждой категории продолжает добавлять результаты предыдущих списков, делая результаты каждого подсписка все больше и больше.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

инициализировать $children внутри цикла foreach

foreach ($cat as $parent) { 
    $children = array();
    ...
0 голосов
/ 06 июля 2013

если у вас есть простой массив

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'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...