2012-05-03 16 views
8

に私はシフトは多次元配列

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

のように見えるかもしれ配列を持っていると私は

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

にそれを有効にしますすべての配列要素を1つ上にします。

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

**組み込み関数**はありません**これは 'foreach'を使わずに**できますか? – Neocortex

+0

配列からデータを抽出するためにネストされた3〜4個のforeachループを使用することはできないので、私はこのような組み込み関数を長時間探していました。誰かがforeach esp:を使わずに立ち上げることができるのであれば、私はPHPの王冠として呼びます。 – Neocortex

16

それはちょっとし、多くの方法が考えられるのです。 call_user_func_array­Docs介し

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

または一度にすべてのサブアレイとarray_merge­Docsを使用して:アレイ内のすべてのアレイの和集合を作成array union operator (+)­Docs使用たとえば

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

'call_user_func_array'は魅力的に機能しました!ありがとう。 – racl101

+0

"foreach"ループを避けるため、この方法をお勧めします。ありがとう。 –

+2

PHP 5.6からは、スプラット演算子 '' '$ arr = array_merge(... $ arr)' ''を使用することができます。これはcall_user_func_arrayよりもはるかに高速です –