'Grouping' PHP 结果来自 MySQL 查询

'Grouping' PHP results from an MySQL query

我很难做到这一点,所以我想问一下..

我有一个 table,其中包含一些字段名称。 table 中的每个字段条目都按照规范具有类型、名称和 ID。

我希望能够将我的 SQL 结果分组,以便我可以 'print' 将每种类型(以及该类型的关联成员)放入 table。我尝试了以下方法:

$query = "SELECT id,type,opt_name FROM fields ORDER BY type";  
$resource = $pdo->query($query);
$results = array();
while ( $row = $resource->fetch() ) {   
$type[$row['type']] = $row['opt_name'];
$o_id = clean($row['id'], 'text');
$o_name = clean($row['opt_name'], 'text');
}

foreach ($type AS $o_type => $o_name) {
    echo $o_type;
    echo "<br>";

    foreach (($type) AS $opt_name) { 
        echo $opt_name;
        echo "<br>";
         }
 }

请不要太担心 HTML 输出,这只是为了显示上下文。

代码执行时,只会打印一行。结果,我 'print_r' 测试了两个:

$type[$row['type']] = $row['opt_name'];

确实只显示数组中的一行。创建:

$results = $row;

显示所有数据,但太多了,而且不符合我认为可以与 'foreach' 一起使用的方式。

我可能在这里犯了一个菜鸟错误,但看不到它。

求助!

您将覆盖 $type['type'] 的值,而不是使用以下方法将更多值推入其中:

$type[$row['type']] = $row['opt_name'];

你很可能想要

$type[$row['type']][] = $row['opt_name'];

然后您需要修复循环,以便循环遍历选项,而不是类型。

foreach ($type AS $o_type => $options) {
    echo $o_type;
    echo "<br>";

    foreach ($options AS $opt_name) { 
        echo $opt_name;
        echo "<br>";
    }
}