Php 递归地分配数组中每个子级的级别
我有一个具有以下结构的数组:Php 递归地分配数组中每个子级的级别,php,Php,我有一个具有以下结构的数组: Array ( [25] => Array ( [id] => 25 [level] => 0 [children] => Array ( ) [name] => Databases [parent_id] => 1 ) [34] => Array ( [
Array
(
[25] => Array
(
[id] => 25
[level] => 0
[children] => Array
(
)
[name] => Databases
[parent_id] => 1
)
[34] => Array
(
[id] => 34
[level] => 0
[children] => Array
(
[35] => Array
(
[id] => 35
[level] => 0
[children] => Array
(
)
[name] => Call Center
[parent_id] => 34
)
[51] => Array
(
[id] => 51
[level] => 0
[children] => Array
(
[75] => Array
(
[id] => 75
[level] => 0
[children] => Array
(
)
[name] => Accounts
[parent_id] => 51
)
)
[name] => Payment System
[parent_id] => 34
)
)
[name] => proyects
[parent_id] => 1
)
)
我需要在元素所在的位置分配每个子元素的项目级别,例如:
Array
(
[25] => Array
(
[id] => 25
[level] => 0
[children] => Array
(
)
[name] => Databases
[parent_id] => 1
)
[34] => Array
(
[id] => 34
[level] => 0
[children] => Array
(
[35] => Array
(
[id] => 35
[level] => 1
[children] => Array
(
)
[name] => Call Center
[parent_id] => 34
)
[51] => Array
(
[id] => 51
[level] => 2
[children] => Array
(
[75] => Array
(
[id] => 75
[level] => 1
[children] => Array
(
)
[name] => Accounts
[parent_id] => 51
)
)
[name] => Payment System
[parent_id] => 34
)
)
[name] => proyects
[parent_id] => 1
)
)
我在下面的链接中使用了此代码,但没有按预期工作
最好的方法是什么?创建一个递归函数并使用它 }
将其传递给数组,它将返回指定级别的相同数组。刚刚测试过它
好奇:
数组来自哪里?也许可以在导入时读取并增加级别?除非以不正确的级别返回,否则级别是从0还是1开始?从您的示例中不清楚。来自数据库中填充的另一个数组,代码板上的函数getBoardIndex只设置了数组的层次结构父、子、孙。。对不起,我的英语不好。@antoyo from 1,0仅适用于+1-非常好。。我访问了函数read\u levels($array,$level=0){foreach($id=>$arr){
并看到了您的帖子..谢谢!!工作正常!!:)
<?php
$list = array(
25 => array(
'id' => 25,
'name' => 'Databases',
'parent_id' => 1,
),
34 => array(
'id' => 34,
'name' => 'proyects',
'parent_id' => 1,
),
35 => array(
'id' => 35,
'name' => 'Call Center',
'parent_id' => 34,
),
51 => array(
'id' => 51,
'name' => 'Payment System',
'parent_id' => 34,
),
75 => array(
'id' => 75,
'name' => 'Accounts',
'parent_id' => 51,
),
);
$cats = array(1,2,3,4,5);
$boards = getBoardIndex($list,$cats);
print '<pre>'; print_r($boards); print '</pre>';
function getBoardIndex($data, $parent_id, $tree = array())
{
foreach($data as $idx => $row)
{
if(in_array($row['parent_id'], array_values($parent_id)))
{
foreach($row as $k => $v)
{
$tree[$row['id']][$k] = $v;
$tree[$row['id']]['level'] = in_array($row['parent_id'],array_values($parent_id)) ? 0 : array_search($k,array_keys($row));
unset($data[$idx]);
$tree[$row['id']]['children'] = getBoardIndex($data,array($row['id']));
}
}
}
ksort($tree);
return($tree);
}
?>
function assignLevels($array, $level=0) {
foreach($array as $key => $subarray) {
$array[$key]['children'] = assignLevels($subarray['children'], $level+1);
$array[$key]['level'] = $level;
}
return $array;