【问题标题】:How to make a Nested List from array in PHP (noob)如何在 PHP 中从数组创建嵌套列表(菜鸟)
【发布时间】:2011-06-25 20:22:48
【问题描述】:

我有一个用户选择项目的应用程序,然后它填充一个包含两列的表:类别和项目。它是这样的:

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 ) )

我想要做的是将数据输出到类似这样的嵌套列表中。

  • 冷食
    • 牛排
    • 鸡蛋
  • 健康
    • 牙刷
  • 宠物
    • 猫粮
    • 狗粮

欢迎任何帮助!谢谢!

【问题讨论】:

标签: php arrays list nested


【解决方案1】:

试试这个:

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;

【讨论】:

  • 雅各布你摇滚。几个星期以来,我一直在摸不着头脑,你在 13 分钟内就搞定了。我必须做的唯一改变是在第二个“$buffer”上。我把它从 $buffer .='
    • ';到 $buffer .='
    • '.$cat.'
      • ';
  • @Cornfed 你成就了我的一天! :-)
  • 【解决方案2】:

    试试这个。这个想法是将您的数据重新组织成更方便的形式,即按类别对项目进行索引。

    代码

    <?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>
    

    输出

    • 冷食
      • 牛排
    • 食物
      • 鸡蛋
    • 健康
      • 牙刷
    • 宠物
      • 猫粮
      • 狗粮

    【讨论】:

    • 这行得通,但你不认为有一个嵌套数组会很干燥吗?
    • asort($items) 不会让您免于创建一个全新的数组吗?
    【解决方案3】:
    <?
    //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>';
        }
    }
    ?>
    

    【讨论】:

      【解决方案4】:

      试试这个:

      while($listItems = mysql_fetch_array($results)) 
      {
           $myArray[$listItems["Category"]][] = $listItems["Name"] 
      }
      

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签