PHP复杂多维数组迭代



我需要遍历多维数组。但我需要做得更复杂:迭代必须按级别进行-首先是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

相关内容

  • 没有找到相关文章

最新更新