PHP规范化多维数组

3

我希望能够规范化一个数组并需要帮助。

我的数组:

$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
}

当前函数的输出结果与输入结果相同。有人有什么想法,应该怎么做呢?


1
你的代码有几个语法问题。myarr 前面缺少一个美元符号,大括号松散,isset 函数参数周围缺少括号,末尾附近缺少分号... - trincot
1个回答

4

您可以使用RecursiveIteratorIterator

$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/value对。因此,你需要将该数组与当前结果连接起来。你可以使用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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接