[英]How to organize multi-dimensional arrays in PHP?
我具有如下的类别层次结构,但是我不知道该如何列出所有具有父级的对象。
$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
那么,如何使用多维数组创建此类别列表?
首先,您的数组声明是错误的,首先将'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>';
}
我希望我的代码清楚。
由于您似乎不需要任何辅助属性,因此您既不应以枚举数组开头,也不应使用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数组仍然是顺序字典。
在该结构上进行迭代与其他变体相似,除了实际数据已包含在键中。
多维数组的正确方法是使用递归。 伪代码为:
function tree($data){
if (has_kids($data))
return tree($data['kids']);
}
return $data[0];
}
var_dump(tree($data));
另外,要了解理论,请查阅本文 ,了解关于树木遍历的知识(多维类别是树木的示例)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.