Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中创建动态数组键的字符串?_Php_Arrays_Recursion - Fatal编程技术网

如何在php中创建动态数组键的字符串?

如何在php中创建动态数组键的字符串?,php,arrays,recursion,Php,Arrays,Recursion,此数组是动态的,可以有任意数量的记录,也可以有任意级别的嵌套数组: Array ( [name] => richard [email] => richard@gmail.com [address] => Array ( [city] => paris [zip] => 12121 ) [address1] => Array (

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

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

如何使用递归实现它?

要获得这个结果,您只需在数组上循环-如果项目再次是数组,则也要在内部项目上循环

可以这样做:

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

echo $str;

这个递归函数将执行您想要的操作。它检查数组当前级别的每个项,如果它是数组,则将当前键附加到该数组的所有键上,并根据需要进行递归。如果该项不是数组,它的键将简单地附加到该级别的输出中

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 
)
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);