如何按列分组获取数据?

时间:2012-06-15 08:23:16

标签: php joomla

我有一个示例数据:

mobile(id, name, os)
      (1, "samsung 1", "android")
      (2, "samsung 2", "android")
      (3, "iPhone 3", "OS")
      (4, "iPhone 4", "OS")
      (5, "samsung 3", "android")

并查询:

$db =& JFactory::getDBO(); 
$query = "SELECT id, name, os
          FROM `mobile` order by os";
$db->setQuery($query);        
$rows = $db->loadObjectList(); 
$i=0;
$data = array();
foreach ($rows as $row) {
    if(empty($data[$row->os])) {
        $data[$row->os] = array();
    }
    if(empty($data[$row->os][$row->name])) {
        $data[$row->os][$row->name] = array();
    }
    $data[$row->os][$row->name] = $row->id;
}
<?php foreach ($data as $os => $names) {?>
<li>
    <?php echo $os; ?>
    <ul>
        <?php
        foreach ($names as $name => $id) {
            ?>
            <li>
                <?php echo $name; ?>
            </li>
            <?php
        }
        ?>
    </ul>
</li>               
<?php $i++; }?>

当我运行代码时,结果不显示在此:

android
-samsung 1
-samsung 2
-samsung 3
OS
-iPhone 3
-iPhone 4

如何解决?

2 个答案:

答案 0 :(得分:0)

$data[$row->os][$row->name] = $row->id

应该是

$data[$row->os][$row->id] = $row->name

(并相应地更改如下)

您继续使用$data["android"]["Samsung"]覆盖1, 2, 3, 4;通过ID等唯一的东西来索引,而不是通过可以重复的名称来索引。

编辑:我看到你将$data[$row->os][$row->id]初始化为数组,但是然后用$row->name覆盖该值;并且你不会在它上面循环;所以它没用。这也是一种方式,但效率较低,因为更多不必要的循环。

答案 1 :(得分:0)

改变这个:

$data[$row->os][$row->name] = $row->id;

对此:

$data[$row->os][$row->name][] = $row->id;

第一个用单个项目替换数组。第二个将项目推送到数组上。