我有如下的类别层次结构,但我不知道如何列出,尽管他们有父母。
$array[1] = 'A';
$array[1]['children'][1] = 'A1';
$array[1]['children'][2] = 'A2';
$array[2] = 'B';
$array[2]['children'][1] = 'B1';
$array[2]['children'][1]['children'][1] = 'B1-1';
$array[2]['children'][1]['children'][2] = 'B1-2';它应该类似于未排序的列表标记(ul > li):
A
A1
A2
B
B1
B1-1
B1-2那么,如何使用多维数组创建这个类别列表呢?
发布于 2011-03-03 01:31:52
首先,您的数组声明是错误的,您首先将'A‘赋值给$array[1],然后尝试在关联数组中“转换”$array[1]以添加子对象。
你可以这样做:
$array[1]['name'] = 'A';
$array[1]['children'][1]['name'] = 'A1';
$array[1]['children'][2]['name'] = 'A2';
$array[2]['name'] = 'B';
$array[2]['children'][1]['name'] = 'B1';
$array[2]['children'][1]['children'][1]['name'] = 'B1-1';
$array[2]['children'][1]['children'][2]['name'] = 'B1-2';然后,您可以使用如下所示的函数显示列表:
function make_list($array) {
echo '<ul>';
foreach ($array as $a) {
echo '<li>' . $a['name'];
if (isset($a['children']) && is_array($a['children'])) {
make_list($a['children']);
}
echo '</li>';
}
echo '</ul>';
}我希望我的代码是清晰的。
发布于 2011-03-03 01:32:23
由于似乎不需要任何辅助属性,因此既不应该从枚举数组开始,也不应该使用children子数组。在您的例子中,您可以使用条目作为键名:
$hierarchy["A"] = array();
$hierarchy["A"]["A1"] = array();
$hierarchy["A"]["A2"] = array();
$hierarchy["B"] = array();
$hierarchy["B"]["B1"] = array();
$hierarchy["B"]["B2"]["B1-1"] = array();
$hierarchy["B"]["B2"]["B1-2"] = array();这种结构简单地假设所有条目都可以有子项,因此无论如何都可以是数组。请注意如何将其压缩为:
$hierarchy = array(
"A" => array(
"A1" => array(),
"A2" => array(),
),
"B" => array(
"B1" => array(
"B1-1" => array(),
"B1-2" => array(),
),
),
);排序被保留,因为PHP数组无论如何都是有序字典。
迭代该结构与其他变体类似,不同之处在于实际数据已经包含在键中。
发布于 2011-03-03 01:21:43
处理多维数组的正确方法是使用递归。伪代码将是:
function tree($data){
if (has_kids($data))
return tree($data['kids']);
}
return $data[0];
}
var_dump(tree($data));此外,要了解理论,请查看this article,关于树遍历(多维类别是树的示例)。
https://stackoverflow.com/questions/5171023
复制相似问题