php - 创建第 n 级形式数组列表的数组树
问题描述
我只有第N个级别数组返回,这个函数返回所有子列表
$arr = array(
array('id'=>100, 'parentid'=>0, 'name'=>'a'),
array('id'=>101, 'parentid'=>100, 'name'=>'a'),
array('id'=>102, 'parentid'=>101, 'name'=>'a'),
array('id'=>103, 'parentid'=>101, 'name'=>'a'),
);
$new = array();
foreach ($arr as $a){
$new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));
print_r($tree);
function createTree(&$list, $parent){
$tree = array();
foreach ($parent as $k=>$l){
if(isset($list[$l['id']])){
$l['children'] = createTree($list, $list[$l['id']]);
}
$tree[] = $l;
}
return $tree;
}
此函数返回数组中的所有数据。
此函数返回不能返回特定级别完成然后中断并返回值
解决方案
像这样试试。
$array = array(
array('id'=>100, 'parentid'=>0, 'name'=>'a'),
array('id'=>101, 'parentid'=>100, 'name'=>'a'),
array('id'=>102, 'parentid'=>101, 'name'=>'a'),
array('id'=>103, 'parentid'=>101, 'name'=>'a')
);
echo '<pre>';
print_r(array_to_tree($array));
exit;
转换树的函数。
function array_to_tree(array $array, $parent_id = 0)
{
$array = array_combine(array_column($array, 'id'), array_values($array));
foreach ($array as $k => &$v) {
if (isset($array[$v['parentid']])) {
$array[$v['parentid']]['children'][$k] = &$v;
}
unset($v);
}
return array_filter($array, function($v) use ($parent_id) {
return $v['parentid'] == $parent_id;
});
}
输出会。
根据您的要求,您只需要 2 个级别,然后不要使用递归函数。//从foreach中删除createTree
function createTree(&$list, $parent){
$tree = array();
foreach ($parent as $k=>$l){
if(isset($list[$l['id']])){
$l['children'] = $list[$l['id']]; //remove createTree from here.
}
$tree[] = $l;
}
return $tree;
}
推荐阅读
- javascript - 与 Ruby 相比,在 Javascript 中,在遍历数组时,您是否不需要“保护”以防止迭代器越界?
- javascript - 将 Cookie 添加到 API
- java - 递归遍历java中的矩阵以找到最佳路径
- for-loop - 基于生成行以在数据框的列中创建序列
- c - 如何在 C 中实现多个定时器?
- python-turtle - 乌龟 onscreenclick 在 Python 中返回什么?如何使区域成为“按钮”?
- python - 从 Pandas 系列中的字典列表创建 DataFrame
- javascript - 如何使用 setTimeout/setInterval 显示显示不同时间的图像
- java - 如何实现 Java 8 LocalTimeDeserializer?
- javascript - HTTPOnly cookie 在 Next JS 的 getServerSideProps 中不可用