首页 > 解决方案 > 递归循环遍历多维数组并跟踪父数组

问题描述

这是我正在使用的数组的简短版本:

Array
(
[orders] => Array
    (
        [0] => Array
            (
                [id] => 123
                [email] => somemail@mail.com
                [line_items] => Array
                    (
                        [0] => Array
                            (
                                [id] => 456
                                )
                    )
            )
        )
)

我想遍历它并回显每个 $key => $value 对,但要跟踪“父”数组。使用此功能时:

function recursive($array, $level = 0){
    foreach($array as $key => $value){
        if(is_array($value)){
            recursive($value, $level + 1);
        } else{
            echo $key . ": " . $value, "\n";  
        }
    }
}

我得到:

id: 123
email: somemail@mail.com
id: 456

我想将父数组保留在值的前面,以便我知道哪个id被回显。

orders_0_id: 123
orders_0_email: somemail@mail.com
line_items_0_id: 456

更新的工作解决方案:

function recursive($array, $level = -1,array $parentKey = []){
foreach($array as $key => $value){
    $newKey = array_merge($parentKey, [$key]);
    if(is_array($value)){
        recursive($value, $level + 1, $newKey);
    } else{
      $parent = implode('_', $newKey);
      echo $parent . ": " . $value, "\n";  
    }
}

}

标签: phprecursionmultidimensional-array

解决方案


我认为这就是您要查找的内容,但可能信息太多。

给定这个数组:

$data = [
    'orders' => [
        [
            'id' => 123,
            'email' => 'text@example.com',
            'line_items' => [
                [
                    'id' => 356,
                ],
            ],
        ],
    ],
];

您可以跟踪数组中的父键:

function dumper(array $array, array $parentKey = [])
{
    foreach ($array as $key => $value) {
        $newKey = array_merge($parentKey, [$key]);
        if (is_array($value)) {
            dumper($value, $newKey);
        } else {
            $s = implode('_', $newKey) . ": " . $value . "\n";
            echo $s . PHP_EOL;

        }

    }
}

dumper($data);

这会产生:

orders_0_id: 123

orders_0_email: text@example.com

orders_0_line_items_0_id: 356

推荐阅读