我之前问了一个类似的问题,但我会以不同的方式再问一遍,因为我重新编写了一些代码。
我想知道如何使用PHP和CSS在选择下拉菜单中缩进类别和无限子类别?
这是我的PHP代码,用于显示选择下拉列表。
echo '<select name="parent_id">
<option value="0">None</option>';
function make_list ($parent) {
global $option;
foreach ($parent as $id => $cat) {
echo '<option value="' . $cat['id'] . '">' . $cat['category'] . '</option>';
if (isset($option[$id])) {
make_list($option[$id]);
}
}
}
$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT * FROM categories ORDER BY parent_id, category ASC");
if (!$dbc) {
print mysqli_error();
}
$option = array();
while (list($id, $parent_id, $category) = mysqli_fetch_array($dbc, MYSQLI_NUM)) {
$option[$parent_id][$id] = array('category' => $category, 'id' => $id, 'parent_id' => $parent_id);
}
make_list($option[0]);
echo '</select>';
这是输出。
1. Apple
2. Arts & Entertainment
1. Amusement
2. Art
3. Artists
1. A
1. a1
2. a2
2. B
3. C
4. D
3. Automotive
4. Network
5. Server
6. Web Design
1. CSS
2. HTML
这些数字可以更方便地查看类别和子类别。
我看到你已经有了递归的东西 - 尝试在你的make_list
函数中传递一个“深度”参数 - 当你第一次调用它时,你将$depth
设置为零。然后,当你递归地调用它时,你会说makelist($option[$id], $depth+1);
知道你所处的递归级别,你可以轻松地构造一个空格字符串。喜欢:
$whitespace = str_repeat(' ', $depth);
要获得更多缩进,请尝试str_repeat(' ', $depth * 2);
或类似
然后只是用空格前置你的选项。
你可以尝试这个,工作的例子。与 - 分开 -
echo '<select name="parent_id">
<option value="">Seçiniz</option>';
function make_list ($parent,$depth) {
global $option;
foreach ($parent as $id => $cat) {
$whitespace = str_repeat('-', $depth * 1);
echo '<option value="' . $cat['id'] . '">'. $whitespace . $cat['category'] . '</option>';
if (isset($option[$id])) {
make_list($option[$id], $depth+1);
}
}
}
$dbc = mysqli_query($vt,"SELECT * FROM menus");
$option = array();
while (list($id, $parent_id, $category) = mysqli_fetch_array($dbc, MYSQLI_NUM)) {
$option[$parent_id][$id] = array('category' => $category, 'id' => $id, 'parent_id' => $parent_id);
}
make_list($option[0], $depth = 0);
echo '</select>';