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