Массив для данных выпадающего меню

#php #javascript #mysql #html #menu

#php #javascript #mysql #HTML #меню

Вопрос:

Есть несколько идей для создания выпадающего меню из данных, заполненных из xml или json. Но как я могу сделать это чисто с помощью php? Возможным методом является создание многоуровневого массива. Но каков наилучший способ создать его из данных mysql (с родительским идентификатором для подменю) и как эффективно считывать массив (через цикл foreach?)?

Ответ №1:

на стороне php предположим, что вы извлекаете с помощью этого запроса то, что находится в таблице в массиве формата:

 $menu = array(
   'page/1' => 'about',
   'page/2' => 'photos',
   'menu-title' =>  array('page/4' => 'sub-menu-1','page/5' => 'sub-menu-2')
);

echo '<ul>';
foreach($menu as $key => $value){
  if(is_string($value)){
     echo '<li><a href="'.$key.'">'.$value.'</a></li>';
  }
  if(is_array($value)){
    echo '<ul>';
    echo '<li><a href="#">'.key($value).'</a></li>';
    foreach($value as $sub_key => $sub_value){
      echo '<li><a href="'.$sub_key .'">'.$sub_value.'</a></li>';
    }
    echo '</ul>';
  }
}
echo '</ul>';
  

для базы данных mysql, имейте столбец «parent_id», если он равен нулю, тогда это будет корневой уровень, кроме этого, там будет подзаголовок, еще один столбец «path» и «title, вы также можете добавить столбец «weight», чтобы упорядочить их.

ПРИМЕЧАНИЕ: это непроверенный код

Комментарии:

1. Я протестировал его, и он идеален. Спасибо!

Ответ №2:

Мне нравится перебирать строки, извлеченные из mysql, и создавать массив, где ключ — это значение для ввода, а значение — текст. Итак, если вы хотите создать выпадающий список, например:

 <input value="UT">Utah</input>
<input value="VT">Vermont</input>
<input value="NV">Nevada</input>
<input value="CA">California</input>
  

Я бы создал массив, который выглядел бы так:

 array(

       "UT" => "Utah",
       "VT" => "Vermont",
       "NV" => "Nevada",
       "CA" => "California",
)
  

Очень легко перевести массив в html с помощью foreach .

Комментарии:

1. Вы рассматривали его как выпадающую форму, но я имею в виду список меню как <ul><li><ul> ….. и проблема в том, как перечислить дочерние элементы.

2. это не приведет к созданию выпадающего списка, для которого вам нужно использовать select.