Как сделать Вложенный Список из массива в PHP (noob) - PullRequest
1 голос
/ 12 февраля 2011

У меня есть приложение, в котором пользователи выбирают элементы, а затем оно заполняет таблицу, в которой есть два столбца: категория и элементы.Это примерно так:

Category  | Items 
-----------------
PET       | Dog Food
HEALTH    | Tooth Brush
PET       | Cat Food
COLD FOOD | Steak
COLD FOOD | Eggs

В моем операторе выбора я упорядочиваю данные по категориям, а затем по элементам и использую цикл WHILE для перетаскивания данных в массив.

while($listItems = mysql_fetch_array($results))
{
    $myArray[] = array("category" => $listItems["Category"],
                       "item"     => $listItems["Name"]);
}

Когда я делаю print_r ($ myArray);Я получаю что-то вроде этого:

Array ( [0] => Array ( [category] => Cold Food [item] => Steak )
        [1] => Array ( [category] => Food      [item] => Eggs )
        [2] => Array ( [category] => Health    [item] => Tooth Brush )
        [3] => Array ( [category] => Pet       [item] => Cat Food )
        [4] => Array ( [category] => Pet       [item] => Dog Food ) )

Что я хочу сделать, это вывести данные во вложенный список примерно так:

  • Холодная еда
  • Стейк
  • Яйца
Здоровье
  • Зубная щетка
Домашнее животное
  • Кошачья еда
  • Собачья еда

Любая помощь приветствуется!Спасибо!

Ответы [ 4 ]

4 голосов
/ 12 февраля 2011

Попробуйте:

while($listItems = mysql_fetch_array($results))
{
    $cat  = $listItems['Category'];
    $name = $listItems['Name'];

    if(!isset($myArray[$cat]))
      $myArray[$cat] = array();

    $myArray[$cat][] = $name;
}

Затем, чтобы вывести его, вы должны сделать следующее:

$buffer = '<ul>';
foreach($myArray as $cat => $items) {
   $buffer .= "<li>$cat</li><li><ul>";
   foreach($items as $item) {
      $buffer .= "<li>$item</li>";
   }
   $buffer .= '</ul></li>';
}
$buffer .= '</ul>';
echo $buffer;
1 голос
/ 12 февраля 2011
<?
//establish $vlink before
$query = 'select distinct (category) from list';
$result = mysql_query($query,$vlink);

while($row = mysql_fetch_array($results))
{
    $query1 = "select items from list where category = ".$row[0];
    $result1 = mysql_query($query1,$vlink);

    echo '<h1>'.$row[0].'</h1>';
    while($row1 = mysql_fetch_array($result1))
    {
        echo '<h2>'.$row1[0].'</h2>';
    }
}
?>
1 голос
/ 12 февраля 2011

Дайте это попробовать. Идея состоит в том, чтобы реорганизовать ваши данные в более удобную форму, а именно: проиндексировать элементы по категории.

код

<?php
    $items = array
    (
        array('category' => 'Cold Food', 'item' => 'Steak'),
        array('category' => 'Food', 'item' => 'Eggs'),
        array('category' => 'Health', 'item' => 'Tooth Brush'),
        array('category' => 'Pet', 'item' => 'Cat Food'),
        array('category' => 'Pet', 'item' => 'Dog Food'),
    );

    // Group the items by category.
    $itemsByCategory = array();

    foreach ($items as $item)
    {
        $category = $item['category'];
        $name     = $item['item'];

        if (!array_key_exists($category, $itemsByCategory))
            $itemsByCategory[$category] = array();

        $itemsByCategory[$category][] = $name;
    }

    // Output nested lists for the items.
?>  <ul>
<?php foreach ($itemsByCategory as $category => $items)
      {
?>        <li><?php echo htmlspecialchars($category); ?>

              <ul>
<?php           foreach ($items as $item)
                {
?>                  <li><?php echo htmlspecialchars($item); ?></li>
<?php           }
?>            </ul>
          </li>
<?php }
?>  </ul>

выход

  • холодная еда
    • Стейк
  • Продукты питания
    • Яйца
  • Здоровье
    • Зубная щетка
  • Pet
    • Корм ​​для кошек
    • Корм ​​для собак
0 голосов
/ 12 февраля 2011

Попробуйте с этим:

while($listItems = mysql_fetch_array($results)) 
{
     $myArray[$listItems["Category"]][] = $listItems["Name"] 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...