我有一个simlpe选择框。它打印出来很好,但我希望它缩进子类 所以布局看起来像:
Hardware
- CPU
- Motherboards
-- MSI
-- ASUS
Screens
- Dell
-- 27"
Acer
在我的数据库中,表定义为:
ID - Label - Parent
我目前的代码是:
<select label="users" id="cat" onchange="showUser(this.value)" style="width:100%;padding:3px;cursor:pointer;">
<option value="">-- Choose category -- </option>
<?php
$categories = $mysqli->query("SELECT * FROM medialib_cats");
while($row = $categories->fetch_assoc()){?>
<option value="<?php echo $row['id']; ?>">
<?php echo $row['label']; ?>
</option>
<?php } ?>
</select>
我尝试将结果分组,但它不起作用。如何使用php / mysqli自动缩进?我猜我应该使用递归? 我想只是缩进行 - 而不是使用optgroup请:)
答案 0 :(得分:1)
选项可以使用optgroups:
<select label="users" id="cat" onchange="showUser(this.value)" style="width:100%;padding:3px;cursor:pointer;">
<option value="">-- Choose category -- </option>
<?php
$categories = $mysqli->query("SELECT * FROM medialib_cats");
while($row = $categories->fetch_assoc()){
if ($lastgrp != $row['parent']) {
if ($lastgrp!="") echo "</optgroup>";
$lastgrp = $row['parent'];
echo "<optgroup>".$lastgrp;
}
echo "<option value="+ $row['id'] + ">"+ $row['label'] + "</option>";
} ?></optgroup>
</select>
答案 1 :(得分:1)
使用<optgroup>
是将选择选项组合在一起的标准方法。
$options = array();
$categories = $mysqli->query("
SELECT
id, label, p.label as parent_label
FROM
medialib_cats AS child
INNER JOIN
medialib_cats AS p ON p.id = child.parent
");
foreach($categories as $category) {
$parent = $category['parent_label'];
if (! isset($options[$parent])) $options[$parent] = array();
$options[$parent][$category['id']] = $category['label'];
}
echo "<select>";
foreach($options as $group => $option) {
printf('<optgroup label="%s">', $group);
foreach ($option as $id => $label) {
printf('<option value="%s">%s</option>', $id, $label);
}
printf('</optgroup>');
}
echo "</select>";
我已经创建了一个CodePad example(将db结果模拟为数组)并使其正常工作。
答案 2 :(得分:0)
嗯......猜猜我会尝试不使用optgroup。似乎它导致了一些问题。 还可以在optgroup中找到您无法在选择框中选择父0的情况? 如何通过php在selectbox中添加缩进?