2016-03-27 29 views
0

私は今、次のようなことを試してきましたが、動作させることはできません。 。PHP:2つの配列をマージする

私は、ページ付けのソースから情報を取得しています(たとえば、この例では3ページをだから私が持っている3つの配列がマージする:

Array 
(
    [status] => Active 
    [nrEntries] => 6 
    [entries] => Array 
     (
      [0] => Array 
       (
        [sgname] => Merc 
        [timeentered] => 2016-02-08 04:30:00 
       ) 

      [1] => Array 
       (
        [sgname] => bystander 
        [timeentered] => 2016-03-17 20:55:00 
       ) 
     ) 
) 

Array 
(
    [status] => Active 
    [nrEntries] => 6 
    [entries] => Array 
     (
      [0] => Array 
       (
        [sgname] => Elvis 
        [timeentered] => 2016-03-08 04:30:00 
       ) 

      [1] => Array 
       (
        [sgname] => marcAR 
        [timeentered] => 2016-03-07 20:55:00 
       ) 
     ) 
) 

Array 
(
    [status] => Active 
    [nrEntries] => 6 
    [entries] => Array 
     (
      [0] => Array 
       (
        [sgname] => Killer 
        [timeentered] => 2016-03-09 05:30:00 
       ) 

      [1] => Array 
       (
        [sgname] => MyName 
        [timeentered] => 2016-03-05 21:45:00 
       ) 
     ) 
) 

を私は探しています結果が1にマージすることです私は結果として返すことができる配列。

Array 
(
    [status] => Active 
    [nrEntries] => 6 
    [entries] => Array 
     (
      [0] => Array 
       (
        [sgname] => Merc 
        [timeentered] => 2016-02-08 04:30:00 
       ) 

      [1] => Array 
       (
        [sgname] => bystander 
        [timeentered] => 2016-03-17 20:55:00 
       ) 

      [2] => Array 
       (
        [sgname] => Elvis 
        [timeentered] => 2016-03-08 04:30:00 
       ) 

      [3] => Array 
       (
        [sgname] => marcAR 
        [timeentered] => 2016-03-07 20:55:00 
       ) 

      [4] => Array 
       (
        [sgname] => Killer 
        [timeentered] => 2016-03-09 05:30:00 
       ) 

      [5] => Array 
       (
        [sgname] => MyName 
        [timeentered] => 2016-03-05 21:45:00 
       ) 
     ) 
) 

私はに実行している問題がarray_mergeと、それが原因で、レコードの同じインデックス番号では動作しませんということです。

Iトライ次のように編集しましたが、それはどちらもうまくいきません。

<?PHP 
      // add child array to the end of $result 
      for ($i=0 ; $i<2; $i++) { 
       $result['entries'][($page*2)+$i][] = $resultChild['entries'][$i]; 
      } 
?> 
+0

また、コード内の変数が何であるかはわかりません。 – PeeHaa

+0

私は十数個の異なるものを試してみましたが、すべて動作していません。あなたはこの問題を助ける何かを持っていますか? – Paul

答えて

1
$a1['entries'] = array_merge_recursive($a1['entries'], $a2['entries'], $a3['entries']); 
+0

これは完全に機能しました。 – Paul

+0

私はこの答えを選ぶのは、それが最もクリーンで簡潔なコードラインだからです。以下の答えも働きます。 – Paul

1

これを試してみてください:

$array1 = array(
'status' => 'Active', 
'nrEntries' => 6, 
'entries' => array(
    array(
     'sgname' => 'Merc', 
     'timeentered' => '2016-02-08 04:30:00' 
    ), 
    array(
     'sgname' => 'bystander', 
     'timeentered' => '2016-03-17 20:55:00' 
    ) 
) 
); 

$array2 = array(
'status' => 'Active', 
'nrEntries' => 6, 
'entries' => array(
    array(
     'sgname' => 'Elvis', 
     'timeentered' => '2016-03-08 04:30:00' 
    ), 
    array(
     'sgname' => 'marcAR', 
     'timeentered' => '2016-03-07 20:55:00' 
    ) 
    ) 
); 

$result = array_merge_recursive($array1, $array2); 
$result['status'] = array_unique($result['status'])[0]; 
$result['nrEntries'] = array_unique($result['nrEntries'])[0]; 
echo "<pre>"; 
print_r($result); 
echo "</pre>"; 

これは、次のようになります:

Array 
(
    [status] => Active 
    [nrEntries] => 6 
    [entries] => Array 
    (
     [0] => Array 
      (
       [sgname] => Merc 
       [timeentered] => 2016-02-08 04:30:00 
      ) 

     [1] => Array 
      (
       [sgname] => bystander 
       [timeentered] => 2016-03-17 20:55:00 
      ) 

     [2] => Array 
      (
       [sgname] => Elvis 
       [timeentered] => 2016-03-08 04:30:00 
      ) 

     [3] => Array 
      (
       [sgname] => marcAR 
       [timeentered] => 2016-03-07 20:55:00 
      ) 

    ) 

    ) 

は、この情報がお役に立てば幸いです。

+0

ありがとう、これは実際に問題を解決しました。 – Paul

+0

あなたは大歓迎です。乾杯! xD –

1

array_merge()は再帰的ではありませんので、エントリ配列全体を置き換えます。 array_merge_recursive()と呼ばれる機能がありますが、いずれの場合も、すべての配列の値を含むstatusnrEntriesの配列が作成されるため、機能しません。

「大きな」ページ配列をマージして別々にマージする必要があります。これは次のようになります。

// Keep all pages in an array 
$pages = [$pageOne, $pageTwo, $pageThree]; 

// Merge the page arrays 
$result = array_merge(...$pages); 

// Clear entries as they only contain the data from the last page 
$result['entries'] = []; 

// Merge entries with the entries of each page separately 
foreach ($pages as $page) { 
    $result['entries'] = array_merge($result['entries'], $page['entries']); 
} 

これは私が考えることができる最も単純な例です。何が起こっているのかを理解するのに役立ちますので、ニーズに合わせてリファクタリングすることができます。

エントリ配列に0から始まる数字キーがある限り、置換する代わりにarray_mergeが値を追加します。

関連する問題