首页 > 解决方案 > 如何在 php 中使用动态数组键创建字符串?

问题描述

这个数组是动态的,可以有任意数量的记录,并且可以有任何级别的嵌套数组:

Array
(
    [name] => richard
    [email] => richard@gmail.com
    [address] => Array
        (
            [city] => paris
            [zip] => 12121
        )

    [address1] => Array
        (
            [city] => paris
            [zip] => 12121
        )

    [address3] => Array
        (
            [city] => paris
            [zip] => 12121

        )

)

我正在尝试从嵌套数组键构造一个字符串。我需要使用循环从键构造这样的字符串:

结果应该是这样的:

 address.city
   address.zip
   address1.city
   address1.zip....so on

如何使用递归来实现?

标签: phparraysrecursion

解决方案


这个递归函数会做你想做的事。它检查数组当前级别的每个项目,如果它是一个数组,则将当前键附加到该数组的所有键上,并尽可能深地递归。如果该项目不是一个数组,它的键只是简单地附加到该级别的输出。

function list_keys($array) {
    $output = array();
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            foreach (list_keys($v) as $path) {
                $output[] = "$k.$path";
            }
        }
        else {
            $output[] = $k;
        }
    }
    return $output;
}

print_r(list_keys($array));

输出(用于您的样本数据)

Array (
    [0] => name
    [1] => email
    [2] => address.city
    [3] => address.zip
    [4] => address1.city
    [5] => address1.zip
    [6] => address3.city
    [7] => address3.zip 
)

3v4l.org 上的演示


推荐阅读