假设我有以下数组:
$arr['foo']['bar']['test'] = 'value';
$arr['noo']['boo'] = 'value';
$arr['goo'] = 'value';
$arr['hi'][] = 'value'; // $arr['hi'][0]
$arr['hi'][] = 'value2'; // $arr['hi'][1]
我需要将此转换为:
$arr['foo[bar][test]'] = 'value';
$arr['noo[boo]'] = 'value';
$arr['goo'] = 'value';
$arr['hi[0]'] = 'value';
$arr['hi[1]'] = 'value2';
我试过写一个递归函数,虽然看起来我缺乏逻辑。感谢您撰写此代码的帮助。
很多人一直在问我为什么需要这个?嗯..这是我的表格类,我发现它非常有用。
答案 0 :(得分:1)
根据此处的第一条评论:http://php.net/manual/en/function.array-values.php
<?php
$arr['foo']['bar']['test'] = 'value1';
$arr['noo']['boo'] = 'value2';
$arr['goo'] = 'value3';
$arr['hi'][] = 'value4'; // $arr['hi'][0]
$arr['hi'][] = 'value5'; // $arr['hi'][1]
function array_flatten($a,$f=array(), $prefix = "") {
if(!$a||!is_array($a))return '';
foreach($a as $key=>$value) {
if(is_array($value)) {
$pref = ($prefix === "") ? $key : $prefix . "[$key]";
$f = array_flatten($value,$f, $pref);
} else {
$pref = ($prefix === "") ? $key : $prefix . "[$key]";
$f[ $pref ] = $value;
}
}
return $f;
}
var_dump(array_flatten($arr));
/*
Expected output:
$arr['foo[bar][test]'] = 'value1';
$arr['noo[boo]'] = 'value2';
$arr['goo'] = 'value3';
$arr['hi[0]'] = 'value4';
$arr['hi[1]'] = 'value5';
My output:
array(5) {
["foo[bar][test]"]=>
string(6) "value1"
["noo[boo]"]=>
string(6) "value2"
["goo"]=>
string(6) "value3"
["hi[0]"]=>
string(6) "value4"
["hi[1]"]=>
string(6) "value5"
}
*/
?>