我有这个数组:
Array
(
[one] => one_value
[two] => Array
(
[four] => four_value
[five] => five_value
)
[three] => Array
(
[six] => Array
(
[seven] => seven_value
)
)
)
我想将它转换为这种类型的数组:
Array
(
[one] => one_value
[two-four] => four_value
[two-five] => five_value
[three-six-seven] => seven_value
)
我怎样才能做到这一点?有某种“递归”吗?但是怎么样? :\ 提前谢谢!
答案 0 :(得分:3)
<?php
$array = array(
'one' => 'one_value',
'two' => array
(
'four' => 'four_value',
'five' => 'five_value'
),
'three' => array
(
'six' => array
(
'seven' => 'seven_value'
)
)
);
function flatten($array, $prefix = '') {
$arr = array();
foreach($array as $k => $v) {
if(is_array($v)) {
$arr = array_merge($arr, flatten($v, $prefix . $k . '-'));
}
else{
$arr[$prefix . $k] = $v;
}
}
return $arr;
}
var_dump(flatten($array));
//output:
//array(4) {
// ["one"]=>
// string(9) "one_value"
// ["two-four"]=>
// string(10) "four_value"
// ["two-five"]=>
// string(10) "five_value"
// ["three-six-seven"]=>
// string(11) "seven_value"
//}
答案 1 :(得分:1)
您可以使用堆栈实现递归处理:
$separator = '-';
$flat = array();
while ($array);
{
$key = key($array);
$value = array_shift($array);
if (is_array($value))
{
foreach($value as $subKey => $node)
{
$array[$key.$separator.$subKey] = $node;
}
}
else
{
$flat[$key] = $value;
}
}
输出(Demo):
Array
(
[one] => one_value
[two-four] => four_value
[two-five] => five_value
[three-six-seven] => seven_value
)