-1

我有一个样本数据:

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

如何解决?

4

2 回答 2

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;覆盖该值 而且您不会遍历它;所以没用。这也是一种方式,但效率较低,因为更多不必要的循环。

于 2012-06-15T08:27:35.197 回答
0

改变这个:

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

对此:

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

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

于 2012-06-15T09:17:10.317 回答