在php中遍历数组的特定问题

时间:2019-09-17 00:33:59

标签: php arrays traversal

我给了数组:

array(
   "firstName": null,
   "lastName": null,
   "category": [
        "name": null,
        "service": [
           "foo" => [
               "bar" => null
           ]
        ]
   ]
)

需要转换为此:

array(
    0 => "firstName",
    1 => "lastName",
    2 => "category",
    "category" => [
        0 => "name",
        1 => "service",
        "service" => [
             0 => "foo",
             "foo" => [
                  0 => "bar"
             ]
        ]
    ]
)

循环应检查值是否为数组,如果是,则应将键作为值(0 => category)添加到数组的根,然后保留键原样({{1} }),然后再次遍历该值以构建树,如示例所示。

我对此一无所知,每次尝试,都会得到错误的结果。有没有人是阵列专家并且知道如何简单地做到这一点?

到目前为止的代码:

category => ...

2 个答案:

答案 0 :(得分:1)

您可以使用array_reduce

function prepareFields(array $array): array
{
  return array_reduce(array_keys($array), function ($result, $key) use ($array) {
    $result[] = $key;
    if (is_array($array[$key])) {
      $result[$key] = prepareFields($array[$key]);
    }
    return $result;
  });
}

演示:https://3v4l.org/3BfKD

答案 1 :(得分:0)

您可以执行此操作,请选中Demo

    function array_format(&$array){
        $temp_array = [];
        foreach($array as $k=>$v){
            $temp_array[] = $k;
            if(is_array($v)){
                array_format($v);
                $temp_array[$k] = $v;
            }
        }
        $array = $temp_array;
    }
    array_format($array);
    print_r($array);