2012-05-03 56 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 –

相關問題