如果我的头衔令人困惑,请道歉。我有一个类似的表,看起来像这样:
ID, Name, Parent
1, Cat1, 0
2, Cat1_1, 1
3, Cat1_2, 1
4, Cat2, 0
5, Cat2_1, 4
6, Cat2_1_1, 5
我正在尝试将其转换为多维数组,以便类别树以正确的格式提供以用于显示目的等。
我正在编写一个递归函数(在类中),它将类别树的每个级别写入类变量。我的问题是,一旦我越过第二级,我就失去了引用类var的能力,以便创建当前类别的孩子。
我可以获得数组路径的字符串表示形式,但是有一种方法我可以评估它以便让我访问数组的正确级别...
通过示例:
$path_string = "[4]['children'][5]['children']";
是否有一些函数允许我说$ cat_path = $ cats。$ path_string以便$ cat_path指向数组的正确级别。
很抱歉,如果这一切听起来有点令人困惑。或者,如果有人知道更好的方法将数据(如上面的表示例中所示)转换为正确的多维数组,请告诉我!
由于
答案 0 :(得分:0)
您可以创建一个可以为您下降路径的函数。例如:
function descend($array, $path) {
foreach ($path as $pathMember) {
if (!array_key_exists($array, $pathMember)) {
return null;
}
$array = $array[$pathMember];
if (!array_key_exists($array, 'children')) {
// or throw
return null;
}
$array = $array['children'];
}
return $array;
}
$descended = descend($categories, array(4, 5));
答案 1 :(得分:0)
假设一个平面数组(id,name,parent):
$treearray = array(0 => array('children'=>array()));
foreach($flatarray as $item){
if(!isset($treearray[$item['id']])){
$treearray[$item['id']] = array();
}
$treearray[$item['id']] = array_merge($item,$treearray[$item['id']]);
if(!isset($treearray[$item['parent']]){
$treearray[$item['parent']] = array('children'=>array());
}
$treearray[$item['parent']]['children'][$item['id']] = &$treearray[$item['id']];
}
print_r($treearray[0]);
或者,你也可以在一个项目中为它的父项创建一个引用,创建使用$treearray[$the_id_youre_interested_in]
去任何一种方式的可能性。不要再尝试使用var_dump / print_r了但是,recursionfest deluxe。
答案 2 :(得分:-1)
尝试使用纯函数。
您的函数应该接受父ID并返回其子代数组,而不会更改任何对象的任何状态。
这会让人感到困惑。