Составление списка категорий HTML (PHP) - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть таблица с именем Category, следующая этому шаблону:

id |имя |parent_id

Итак, если категория x является дочерней по отношению к y, то parent_id x является идентификатором y.

У меня также есть функция, которая возвращает массив со всеми столбцами каждой строки.

Формат возврата такой:

return_array [category_id1] = массив ([category_name], [category_parent_id] return_array [category_id2] = массив ([category_name], [category_parent_id]

и т. Д.)... который заботится о получении всех категорий в один массив.

Теперь я хочу закодировать функцию, которая будет возвращать

<li>Category 1
    <li>Child 1</li>
    <li>Child 2
     <li>Child x</li>
    </li>
</li>
<li>Category 2
    <li>Child 1</li>
    // etc
</li>

Я ломаю голову над этим, но я простоне могу найти способ сделать это ...

Ответы [ 2 ]

0 голосов
/ 22 декабря 2011

попробуйте это.я не проверял, если есть ошибки, но идея здесь

<?php

$aCats = array(
    1 = array(
        'name'=>'Category 1',
        'childs'=> array(
            2 = array(
                'name'=>'Category 1 - A',
                'childs'=> array();
            );  
        );
    );
);

function printParentChild($aCats)
{
    $sHtml = '';

    foreach($aCats as $aCat)
    {
        if(array_key_exists('childs', $aCat) && is_array($aCat['childs']) )
            $sHtml .= printParentChild($aCat['childs']);

        $sHtml .= '<li>'.$aCat.'</li>';
    }
    return '<ul>'.$sHtml.'</ul>';
}

echo $aCats;
0 голосов
/ 22 декабря 2011

В этом сценарии вам нужно 2 массива для простой обработки и без сложных, первый массив должен содержать все ваши категории, например)

$catArr[categoryId] =  'categoryName';

Ваш второй массив должен иметь только родительский Id в качестве ключа и дочерний массив в качестве значения, например.)

$subCatArr[parentId] = Array([0]=>firstChildId, [1]=> secondChildId ..etc)
$subCatArr[parentId] = Array([0]=>firstChildId, [1]=> secondChildId ..etc)

Теперь вы можете перебирать свой массив $ subCatArr и иметь еще один цикл, чтобы иметь дочерние элементы и получать имена категорий из массива $ catArr.

Вы можете сделать этот метод, который также широко используется и очень прост,

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

...