PHP规范化多维数组

时间:2018-12-16 09:15:09

标签: php

想要规范化数组并需要帮助。

我有的数组:

$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 个答案:

答案 0 :(得分:2)

您使用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 /值对。因此,您需要将该数组连接到当前结果。您可以使用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;
}