如何在PHP中使用动态数组键创建字符串?

时间:2019-02-07 23:02:17

标签: php arrays recursion

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

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

如何使用递归来实现?

3 个答案:

答案 0 :(得分:3)

此递归函数将执行您想要的操作。它在数组的当前级别检查每个项目,如果它是一个数组,则将当前键附加到该数组的所有键上,并根据需要进行深度递归。如果该项不是数组,则只需将其键附加到该级别的输出即可。

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 
)

Demo on 3v4l.org

答案 1 :(得分:1)

要获得此结果,您只需要遍历数组-如果项目再次是数组,则也遍历内部项目。

可以这样做:

$str = '';
foreach ($array as $key => $item) {
    if (is_array($item)) {
        foreach ($item as $other_key => $dummy) {
            $str .= ($str ? "\n" : '') . $key . '.' . $other_key;
        }
    }
}

echo $str;

答案 2 :(得分:1)

function func($arr, $prefix = '') : void {
    $prefix = $prefix!='' ? "$prefix." : "";
    foreach ($arr as $key => $value) {
        if (!is_array($value)) {
            echo "$prefix$key\n";
        }
        else {
            func($value, "$prefix$key");
        }
    }
}

func($theArrayInTheQuestion);