PHP从多级数组中获取子集

PHP从多级数组中获取子集,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个多维数组(简化): 我想选择它的一部分(作为一个数组),并将所有的子元素都附加到它 示例1(图例3,无限深度): 示例2(图例3,部门1): 示例3(图例3,无限深度): 我可以遍历这个数组,并将所需的级别保存到一个新数组中,但有没有更简单的方法呢?您必须编写一个递归函数,在整个数组中迭代并拖动深度,以确定每个子数组是否应包含在结果中。使用0表示“一切”非常不切实际。在我的解决方案中,要么不提供深度,要么使用负值检索所有内容 function getSubArray (array $ar

我有一个多维数组(简化):

我想选择它的一部分(作为一个数组),并将所有的子元素都附加到它

示例1(图例3,无限深度):

示例2(图例3,部门1):

示例3(图例3,无限深度):


我可以遍历这个数组,并将所需的级别保存到一个新数组中,但有没有更简单的方法呢?

您必须编写一个递归函数,在整个数组中迭代并拖动深度,以确定每个子数组是否应包含在结果中。使用0表示“一切”非常不切实际。在我的解决方案中,要么不提供深度,要么使用负值检索所有内容

function getSubArray (array $array, $key, $depth = -1) {
    $result = array();
    foreach ($array[$key] as $k => $v) {
       if (is_array($v) && ($depth != 0)) {
           $result[$k] = getSubArray($array[$key], $k, ($depth - 1));
       } else {
           $result[$k] = $v;
       }
    }
    return $result;
}

是的…我看到的太晚了。巨大的代码块把我弄糊涂了我已经更改了答案。你能做一个小的编辑,这样我就可以删除我的否决票了吗Pis这是考虑到他希望0一直走下去吗?没有,但现在如果没有给出深度,它会这样做。我建议使用-1作为不确定的深度标记,并将该条件添加到if中
$result = getArrayKey(3, $dept = 0);

[3] => Array
    (
        [id] => 3
        [id1] => 0
        [children] => Array
            (
                [1002] => Array
                    (
                        [id] => 1002
                        [id1] => 2
                        [children] => Array
                            (
                                [1002] => Array
                                    (
                                        [id] => 1002
                                        [id1] => 2
                                    )
                                [1003] => Array
                                    (
                                        [id] => 1003
                                        [id1] => 2
                                    )
                             )
                    )
                [1003] => Array
                    (
                        [id] => 1003
                        [id1] => 2
                    )
            )
$result = getArrayKey(3, $dept = 1);

[3] => Array
    (
        [id] => 3
        [id1] => 0
    )
$result = getArrayKey(1002, $dept = 0);

[1002] => Array
    (
        [id] => 1002
        [id1] => 2
        [children] => Array
            (
                [1002] => Array
                    (
                        [id] => 1002
                        [id1] => 2
                    )
                [1003] => Array
                    (
                        [id] => 1003
                        [id1] => 2
                    )
            )
    )
function getSubArray (array $array, $key, $depth = -1) {
    $result = array();
    foreach ($array[$key] as $k => $v) {
       if (is_array($v) && ($depth != 0)) {
           $result[$k] = getSubArray($array[$key], $k, ($depth - 1));
       } else {
           $result[$k] = $v;
       }
    }
    return $result;
}