Reputation: 556
I have a situation with a MySQL query like this:
How can I group by category in PHP?
Database scheme:
MySQL query:
$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"
Output:
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"
}
}
Upvotes: 1
Views: 1824
Reputation: 2265
Use foreach and assign it to a new array.
$newOptions = array();
$i=1;
foreach ($category as $option) {
$cname = $option['category_name'];
$itemname = $option['channel_name'];
$newOptions[$cname][$i] = $itemname;
$i++;
}
Upvotes: 1
Reputation: 7902
You could just iterate over the data creating the array in the format you want.
Something like this maybe (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);
?>
Upvotes: 2