合并数组php中的所有键值

时间:2016-12-17 07:01:14

标签: php arrays array-merge

不知道之前是否询问过此问题,经过大量搜索后无法找到。

我的数组看起来像这样,

array(3) {
  [0]=>
  array(2) {
    [0]=>
    array(1) {
      ["userId"]=>
      string(3) "421"
    }
    [1]=>
    array(1) {
      ["userId"]=>
      string(3) "329"
    }
  }
  [1]=>
  array(1) {
    [0]=>
    array(1) {
      ["userId"]=>
      string(3) "329"
    }
  }
  [4]=>
  array(2) {
    [0]=>
    array(1) {
      ["userId"]=>
      string(3) "329"
    }
    [1]=>
    array(1) {
      ["userId"]=>
      string(3) "421"
    }
  }
}

我想要的是,

array(1) {
  [0]=>
  array(5) {
    [0]=>
    array(1) {
      ["userId"]=>
      string(3) "421"
    }
    [1]=>
    array(1) {
      ["userId"]=>
      string(3) "329"
    }
    [2]=>
    array(1) {
      ["userId"]=>
      string(3) "329"
    }
    [3]=>
    array(1) {
      ["userId"]=>
      string(3) "329"
    }
    [4]=>
    array(1) {
      ["userId"]=>
      string(3) "421"
    }
  }
}

我尝试使用array_mergearray_combine和许多foreach()循环。但是没有获得所需输出的运气。

不知道该怎么做。请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以像这样扁平化阵列:

$arr = array(array(['user' => 1], ['user' => 2]), ['user' => 3]);
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
foreach($iterator as $val) {
  $flattened_arr[0][] = $val;
}
var_dump($flattened_arr);

更新:如果您不想使用RecursiveIteratorIterator,您也可以使用array_walk_recursive()执行此操作:

$non_flat_arr = array(array(['user' => 1], ['user' => 2]), ['user' => 3]);
$objTmp = (object) array('flat_arr' => array());
array_walk_recursive($non_flat_arr, create_function('&$v, $k, &$t', '$t->flat_arr[] = $v;'), $objTmp);
var_dump([ 0 => $objTmp->flat_arr]);

这将输出为:

array:1 [
  0 => array:3 [
    0 => 1
    1 => 2
    2 => 3
  ]
]

希望这有帮助!