我很难实现这个,所以我想问一下......
我有一个包含一些字段名称的表。表中的每个字段条目都有一个类型,名称和ID,符合规范。
我希望能够对SQL结果进行分组,以便我可以将每种类型(以及类型的关联成员)“打印”到表中。我尝试了以下方法:
$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'一起使用。
我可能在这里犯了一个新手的错误,但看不到它。
帮助!
答案 0 :(得分:1)
您将覆盖$ 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>";
}
}