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;