【问题标题】:PHP foreach category and itemPHP foreach 类别和项目
【发布时间】:2013-01-06 15:14:56
【问题描述】:

我遇到这样的 MySQL 查询情况:

  • 类别 1 - 项目 1
  • 类别 1 - 项目 2
  • 类别 1 - 项目 3
  • 类别 2 - 项目 3
  • 类别 2 - 项目 4
  • 类别 2 - 项目 5
  • 类别 2 - 项目 1
  • 类别 3 - 项目 4
  • 类别 3 - 项目 10
  • 类别 X - 项目 X 或项目(1,2,3.... 现有)

如何在 PHP 中按类别分组?

数据库方案:

MySQL 查询:

$query = "SELECT cat.category_name, ch.channel_name 
FROM `type_categ` tc , `categories` cat , `channels` ch
WHERE cat.category_id = tc.category_id AND ch.channel_id = tc.channel_id
ORDER BY cat.category_name ASC"

输出:

var_dump($category)
array(x) { 
    [0]=> array(2) { 
            ["category_name"]=> string(8) "Category1" 
                ["channel_name"]=> string(15) "Item1" 
            } 
    [1]=> array(2) { 
            ["category_name"]=> string(8) "Category1" 
                ["channel_name"]=> string(17) "Item2" 
            } 
    [2]=> array(2) { 
            ["category_name"]=> string(8) "Category1" 
                ["channel_name"]=> string(10) "Otem 5" 
            } 
                  ... ...
    [x]=> array(2) { 
            ["category_name"]=> string(8) "Category x" 
                ["channel_name"]=> string(10) "Item x" 
            } 

} 

【问题讨论】:

  • 你试过什么?结果应该是什么样子?缺少一些信息。

标签: php mysql codeigniter loops foreach


【解决方案1】:

您可以迭代数据以创建您想要的格式的数组。
可能是这样的 (working examle here);

<?php
$raw_data = array(
   array('category_name' => 'Category1', 'channel_name' => 'Item 1'),
   array('category_name' => 'Category3', 'channel_name' => 'Item 2'),
   array('category_name' => 'Category1', 'channel_name' => 'Item 2'),
   array('category_name' => 'Category3', 'channel_name' => 'Item 1'),
   array('category_name' => 'Category2', 'channel_name' => 'Item 2'),
   array('category_name' => 'Category2', 'channel_name' => 'Item 1')
);

$sorted = array();

foreach ($raw_data as $k => $v) {
   if(!array_key_exists($v['category_name'], $sorted )) {
      $sorted[$v['category_name']] = array();
   }
   $sorted[$v['category_name']][] = $v['channel_name'];
   sort($sorted[$v['category_name']]);
}
ksort($sorted);
print_r($sorted);
?>

【讨论】:

    【解决方案2】:

    使用 foreach 并将其分配给一个新数组。

      $newOptions = array();
      $i=1;
        foreach ($category as $option) {
          $cname = $option['category_name'];
          $itemname = $option['channel_name'];
    
          $newOptions[$cname][$i] = $itemname;
    $i++;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      相关资源
      最近更新 更多