我正在寻找一个可以转换这个数组的函数:
array(1) {
["a"]=>
array(2) {
["b"]=>
int(1)
["c"]=>
string(5) "hello"
}
}
成像:
array(2) {
["a[b]"]=>
int(1)
["a[c]"]=>
string(5) "hello"
}
即。 “序列化”结构化数组,以便我可以轻松地将它作为隐藏字段放到HTML表单中,当我从$_POST
读取它时,我得到完全相同的结构!是否有任何PHP内置函数?
答案 0 :(得分:3)
你需要自己弄平。没有内置的单行功能可以做到这一点。
function flattenArr($arr, $key, &$result) {
foreach ($arr as $k => $v) {
if (is_array($v)) {
flattenArr($v, $key . "[$k]", $result);
} else {
$result[$key . "[$k]"] = $v;
}
}
}
$obj = array("a" => array("b" => "c", "d" => array("1"=>array(1,2,3,5),"2", "3")));
$result = array();
flattenArr($obj, "", $result);
foreach ($result as $k => $v) {
echo "result$k = $v\n";
}
输出:
result[a][b] = c
result[a][d][1][0] = 1
result[a][d][1][1] = 2
result[a][d][1][2] = 3
result[a][d][1][3] = 5
result[a][d][2] = 2
result[a][d][3] = 3
这可能不会像现在这样,你可能需要修改一下。 HTH
答案 1 :(得分:2)
$arr = array(
"a"=> array( "b"=>1, "c"=>"hello", "d"=> array( "e"=>3, "j"=>"wow") ),
"z" => array( "za"=>22, "tt"=>'wos')
);
function loop_it($array, $arr=array(), $Mkey = false){
foreach ($array as $key => $value) {
$_key = $Mkey ? $Mkey . "[" . $key . "]" : $key;
if(is_array($value)){
$arr += loop_it($value, $arr, $_key);
} else{
$arr[$_key] = $value;
}
}
return $arr;
}
$return = loop_it($arr);
var_dump($return);
这是工作函数.. :))