2012-05-03 59 views
8

我有一个数组,可能看起来像所有数组元素一个水平上移多维数组

$arr = array(
    array(
     'test1' => 'testing1' 
    ), 
    array(
     'test2' => array(
     1 =>'testing2 
    ) 
); 

,我希望把它变成

$newArr = array(
    'test1' => 'testing1', 
    'test2' => array(
     1 => 'testing2' 
    ) 
); 

,所以我一直在试图转移所有数组元素上升一级。

eidt:

这是我的方法组合在一起2阵列:

public function arrayMerge($arr1, $arr2) 
      { 
       foreach($arr2 as $key => $value) { 

        $condition = (array_key_exists($key, $arr1) && is_array($value)); 
        $arr1[$key] = ($condition ? $this->arrayMerge($arr1[$key], $arr2[$key]) : $value); 
       } 

       return $arr1; 
      } 
+0

我需要做同样的事情,虽然我发现只需执行'$ newArray = $ oldArray [0]'就可以解决问题。这不适合你的情况吗? – vertigoelectric

回答

10

尝试

$arr = array(
     array('test1' => 'testing1'), 
     array('test2' => array(1 =>'testing2')) 
); 

$new = array(); 
foreach($arr as $value) { 
    $new += $value; 
} 
var_dump($new); 

输出

array 
    'test1' => string 'testing1' (length=8) 
    'test2' => 
    array 
     1 => string 'testing2' (length=8) 
+0

明显更快,谢谢,这与我的arrayMerge()方法结合使用完美! – Eli

+1

是否没有**内置函数**来执行此操作** WITHOUT **是否使用了“foreach”?在PHP中将多维数组转换为单维更容易** – Neocortex

+0

由于我们无法使用嵌套的3到4个foreach循环从数组中提取数据,因此我长时间搜索这样的内置函数。如果有人可以不使用foreach esp:内置函数,那么我会称他/她为PHP的王冠。 – Neocortex

16

它有点琐碎,很多方法都是可能的。

例如使用array union operator (+)­Docs创建阵列内的所有阵列的联合:通过call_user_func_array­Docs通过使用array_merge­Docs同时与所有子阵列

$newArr = array(); 
foreach ($arr as $subarray) 
    $newArr += $subarray; 

或者:

$newArray = call_user_func_array('array_merge', $arr); 
+0

'call_user_func_array'就像一个魅力!谢啦。 – racl101

+0

我更喜欢这种方法,因为避免了“foreach”循环。谢谢。 –

+2

从PHP 5.6开始,你可以使用splat运算符'''$ arr = array_merge(... $ arr)'''。它比call_user_func_array –

相关问题