PHP Рекурсивные массивы в UL (логика) - PullRequest
2 голосов
/ 09 июня 2011

Я имею в виду Преобразование массива путей в список UL

, и я нашел полезный ответ с этой функцией, но из того, что я делаю, не работает какУ меня есть структуры MySQL Tables с id, parentid, name, чтобы иметь возможность создавать рекурсивную категорию и подкатегорию.

, поэтому я могу экспортировать данные в массивы, в которых есть дополнительный массив, который называется CHILDRENв него входят подкатегории.

, но когда я пытаюсь использовать эту функцию

function buildUL($array) {
        echo "\n<ul>\n";
        foreach ($array as $key => $value) {
            echo "<li><a href=\"#\">";
            echo $value['name'];
            if (is_array($value))
                $this->buildUL($value['children']);
            echo "</a></li>\n";
        }
        echo "</ul>\n";
    }

Проблема в том, что я получил несколько выводов

    как пустые, и я хочучтобы избежать их, вывод
    <ul> 
    <li><a href="#">A
    <ul> 
    <li><a href="#">C
    <ul> 
    <li><a href="#">F
    <ul> 
    <li><a href="#">test
    <ul> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    <li><a href="#">B
    <ul> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    <li><a href="#">1
    <ul> 
    <li><a href="#">2
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">3
    <ul> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    <li><a href="#">99
    <ul> 
    <li><a href="#">Another Test
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">2 X
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">Ham Yum
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">Be You
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">1 Z
    <ul> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    </ul> 
    

    Ответы [ 2 ]

    0 голосов
    / 09 июня 2011
    function buildUL($array) {
            echo "\n<ul>\n";
            foreach ($array as $key => $value) {
                echo "<li><a href=\"#\">";
                echo $value['name'];
                echo "</a></li>\n";
                if (!empty($value['children']))
                    $this->buildUL($value['children']);
            }
            echo "</ul>\n";
        }
    

    попробуйте это ...

    Кстати, неправильно иметь <a ...> text <ul><li><a ...> test2 </a></li></ul> </a>

    0 голосов
    / 09 июня 2011

    Полагаю, вам следует проверить, установлено ли заданное значение ['children'], потому что, как я вижу на одну строку выше

    echo $value['name'];
    

    $ value всегда должно быть массивом, поэтому вы входите в рекурсию для каждого элемента

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

    if ( isset($value['children'] && is_array($value['children']) )
    

    вместо просто if (is_array ($ value))

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