想要规范化数组并需要帮助。
我有的数组:
$myArr = array(
array(
array(
array("id" => 1)
)
),
array("id" => 2),
array("id" => 3),
array(
array(
"id" => 4)
)
);
我想要的数组:
$myArr = array(
array("id" => 1),
array("id" => 2),
array("id" => 3),
array("id" => 4)
);
我解决该问题的想法是调用递归方法,该方法尚不起作用:
function myRecArrFunc(&myarr){
$output = [];
foreach{$myarr as $v}{
if(!isset{$v["id"]){
$output[] = myRecArrFunc($v);
} else{
$output[] = $v;
}
}
return $output
}
当前,该函数的输出与输入相同。有人知道该怎么做?
答案 0 :(得分:2)
$result = [];
foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($myArr)) as $k => $v) {
$result[] = [$k => $v];
}
或更简单的array_walk_recursive
:
$result = [];
array_walk_recursive($myArr, function($v, $k) use (&$result) {
$result[] = [$k => $v];
});
您的代码至少有5个语法错误,但是要忽略这些错误,您需要考虑到递归调用将返回一个数组,其中可能包含许多id /值对。因此,您需要将该数组连接到当前结果。您可以使用array_merge
来使代码正常工作:
function myRecArrFunc(&$myarr){
$output = [];
foreach($myarr as $v){
if(!isset($v["id"])){
$output = array_merge($output, myRecArrFunc($v));
} else{
$output[] = $v;
}
}
return $output;
}