此数组是动态的,可以具有任意数量的记录,并且可以具有任何级别的嵌套数组:
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
如何使用递归来实现?
答案 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
)
答案 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);