如何在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);