1

次のような 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" 
            } 

} 
4

2 に答える 2

2

必要な形式で配列を作成するデータを反復処理するだけです。
このようなものかもしれません(動作例はこちら);

<?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);
?>
于 2013-01-23T08:07:28.293 に答える
1

foreach を使用して、新しい配列に割り当てます。

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

      $newOptions[$cname][$i] = $itemname;
$i++;
    }
于 2013-01-23T08:13:11.730 に答える