我需要遍历多维数组。但我需要做的很复杂:迭代必须按级别进行 - 在1级的第一个元素,仅在它们的2级元素之后,在3级的元素之后,等等。
如果我愿意,我可以自己写,但我需要确保我不会重新发明轮子。在PHP中是否有任何现成的实现?
更新
我应该提供什么代码?这是一个理论问题。我可以为你提供一个阵列......:
Array
(
[lev1_1] => Array
(
[ID] => 3547
[children] => Array
(
[lev2_1] => Array
(
[ID] => 3550
)
[lev2_2] => Array
(
[ID] => 3551
)
)
)
[lev1_2] => Array
(
[ID] => 3547
[children] => Array
(
[lev2_3] => Array
(
[ID] => 3550
[children] => Array
(
[lev3_1] => Array
(
[ID] => 3550
)
[lev3_2] => Array
(
[ID] => 3551
)
)
)
[lev2_4] => Array
(
[ID] => 3551
)
)
)
我需要遍历lev1_x,然后是lev2_x,然后是lev3_x
答案 0 :(得分:1)
嗯,这是一种愚蠢的方式来获得水平的价值。请注意,您需要根据用途调整代码。
function array_values_by_level($array, $level = 0, &$values = null) {
if ($values === null)
$values = array();
if (!isset($values[$level]))
$values[$level] = array();
foreach ($array as $v) {
if (is_array($v))
array_values_by_level($v, $level + 1, &$values);
else
$values[$level][] = $v;
}
return $values;
}
测试用例:
$big_array = array(
'1',
'2',
array(
'2.1',
'2.2',
array(
'2.2.1',
'2.2.2',
array(
'2.2.2.1'
)
),
'2.3',
array(
'2.3.1',
array(
'2.3.1.1',
'2.3.1.2'
)
)
)
);
foreach (array_values_by_level($big_array) as $k => $v)
printf("[%d] %s \n", $k, implode(', ', $v));
// [0] 1, 2
// [1] 2.1, 2.2, 2.3
// [2] 2.2.1, 2.2.2, 2.3.1
// [3] 2.2.2.1, 2.3.1.1, 2.3.1.2