Динамическое меню из MySQL PHP - PullRequest
0 голосов
/ 15 марта 2011

Привет всем, я застрял с массивами.Я пытался сделать меню из моего SQL, но я продолжаю терпеть неудачу.

Это ответ:

Id - 3 , Name - Axle, con - 7, Desc - thin
Id - 4 , Name - Axle, con - 7, Desc - flat
Id - 5 , Name - Ball, con - 8, Desc - round
Id - 6 , Name - Ball, con - 8, Desc - hard

По сути, это соединение и связаны между собой con и partId, то же самоеимеет то же имя.

Все, что он хочет сделать, это:

<ul>

<li>Axle

          <li>thin</li>
          <li>flat</li>
</li>

<li>Ball

         <li>round</li>
         <li>hard</li>

</li>
</ul>

Я пробовал это, но ничего не получил http://www.phpro.org/tutorials/Simple-Mysql-PHP-Menu.html#1

Может ли кто-нибудь направить меняправильное направление?Спасибо

ОБНОВЛЕНИЕ //////////

Хорошо, спасибо за ответы, но я все еще не могу заставить его работать.Я не могу избавиться от двойных осей.

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Сначала я объявил бы пустой массив для навигации.

$part_array = array();

Сначала я бы прошел цикл по массиву и комбинировал элементы на основе имени детали.

$counter = 0;
foreach($mysql_result_array as $part) {
   $part_array[$part['ID'] = $part['ID'];
   $part_array[$part['ID']['Name'] = $part['Name'];
   $part_array[$part['ID']['parts'] = $part;
   $counter++;
}

Теперьиметь все части отдельно, но содержащиеся в одном и том же идентификаторе массива.Отсюда я бы просматривал каждую часть $ part_array и выводил каждую часть в этом идентификаторе как отдельный элемент списка.

    foreach($part_array as $list_item) {
        echo '<ul id="<?=$part_item['ID']?>">';
        echo '<li id="'.$list_item['Name'].'">'.$list_item['Name'];
        echo '<ul id="'.$list_item['Name'].'_sub">';
        foreach($list_item['parts'] as $list_item_part) {
            echo '<li id="'.$list_item['Name'].'_.'.$list_item['Desc'].'"><a href="/part.php?id='.$list_item['conn'].'">'.$list_item['Desc'].'</a>';
        }
    }

Возможно, он не самый эффективный или самый элегантный, но надеюсь,дает вам идею.

0 голосов
/ 15 марта 2011

Лучше всего перебрать список результатов и отделить пункты главного меню от вторичных заголовков:

foreach ($results as $row) {
    extract($row);   // take care that $row entries can't overwrite vars
    $main[$Id] = $Name;
    $sub[$Id][] = $Desc;
}

Затем выполните итерации по основному списку $ и для каждой записи также пропустите список $ sub:

foreach ($main as $Id => $Name) {
    print "<li>$Name";
    print "<ul>";
    foreach ($sub[$Id] as $Desc) {
        print "<li>$Desc";
    }
    print "</ul></li>";
}

Если у вас есть вложенный список (ваш вопрос не сказал так), то вам понадобится рекурсивная функция вместо простого цикла.

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