如何从PHP数组中为下拉选择字段创建嵌套列表?
我的问题与本主题中描述的问题非常相似。问题是,如果投资不是连续的,那么错误地添加破折号如何从PHP数组中为下拉选择字段创建嵌套列表?,php,list,nested,Php,List,Nested,我的问题与本主题中描述的问题非常相似。问题是,如果投资不是连续的,那么错误地添加破折号 function buildTree(Array $data, $parent = 0) { $tree = array(); foreach ($data as $d) { if ($d['parent'] == $parent) { $children = buildTree($data, $d['id']); // set
function buildTree(Array $data, $parent = 0) {
$tree = array();
foreach ($data as $d) {
if ($d['parent'] == $parent) {
$children = buildTree($data, $d['id']);
// set a trivial key
if (!empty($children)) {
$d['_children'] = $children;
}
$tree[] = $d;
}
}
return $tree;
}
function printTree($tree, $r = 0, $p = null) {
foreach ($tree as $i => $t) {
$dash = ($t['parent'] == 0) ? '' : str_repeat('-', $r) .' ';
printf("\t<option value='%d'>%s%s</option>\n", $t['id'], $dash, $t['name']);
if ($t['parent'] == $p) {
// reset $r
$r = 0;
}
if (isset($t['_children'])) {
printTree($t['_children'], ++$r, $t['parent']);
}
}
}
但这不起作用
$rows = array(
array ('id' => 1, 'name' => 'Test 1', 'parent' => 0),
array ('id' => 2, 'name' => 'Test 1.1', 'parent' => 1),
array ('id' => 3, 'name' => 'Test 1.2', 'parent' => 1),
array ('id' => 4, 'name' => 'Test 1.2.1', 'parent' => 3),
array ('id' => 5, 'name' => 'Test 1.2.2', 'parent' => 3),
array ('id' => 6, 'name' => 'Test 1.2.2.1', 'parent' => 5),
array ('id' => 7, 'name' => 'Test 2', 'parent' => 0),
array ('id' => 8, 'name' => 'Test 2.1', 'parent' => 1),
array ('id' => 9, 'name' => 'another data', 'parent' => 1),
);
我怎样才能改变它?抱歉,我的英语不起作用,因为您没有正确设置“parent”属性。即使名称为“test2.1”,使用此算法,也必须设置父索引。如果将阵列更改为此,它将工作:
$rows = array(
array ('id' => 1, 'name' => 'Test 1', 'parent' => 0),
array ('id' => 2, 'name' => 'Test 1.1', 'parent' => 1),
array ('id' => 3, 'name' => 'Test 1.2', 'parent' => 1),
array ('id' => 4, 'name' => 'Test 1.2.1', 'parent' => 3),
array ('id' => 5, 'name' => 'Test 1.2.2', 'parent' => 3),
array ('id' => 6, 'name' => 'Test 1.2.2.1', 'parent' => 5),
array ('id' => 7, 'name' => 'Test 2', 'parent' => 0),
array ('id' => 8, 'name' => 'Test 2.1', 'parent' => 7),
array ('id' => 9, 'name' => 'another data with no parent', 'parent' => 0),
);
我刚刚解决了你的问题 只需将
+$r
替换为$r+1
“破折号”现在工作得很好。是的,但我对如何更改函数以使用我的数组感兴趣。您没有说您希望数组如何工作,也没有显示所需输出的示例。
$rows = array(
array ('id' => 1, 'name' => 'Test 1', 'parent' => 0),
array ('id' => 2, 'name' => 'Test 1.1', 'parent' => 1),
array ('id' => 3, 'name' => 'Test 1.2', 'parent' => 1),
array ('id' => 4, 'name' => 'Test 1.2.1', 'parent' => 3),
array ('id' => 5, 'name' => 'Test 1.2.2', 'parent' => 3),
array ('id' => 6, 'name' => 'Test 1.2.2.1', 'parent' => 5),
array ('id' => 7, 'name' => 'Test 2', 'parent' => 0),
array ('id' => 8, 'name' => 'Test 2.1', 'parent' => 7),
array ('id' => 9, 'name' => 'another data with no parent', 'parent' => 0),
);