我需要遍历多维数组。但我需要做得更复杂:迭代必须按级别进行-首先是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
好吧,这里有一个按级别获取值的愚蠢方法。请注意,您需要根据您的使用情况调整代码。
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