2016-03-27 4 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 он не будет работать из-за одинаковых индексов записей.

Я три ed, но это тоже не работает.

<?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(), но это тоже не будет работать в вашем случае, так как она создаст массивы под status и nrEntries, содержащие значения из всех массивов.

Что вам нужно сделать, так это объединить «большие» массивы страниц, а затем объединить записи отдельно. Это может выглядеть так:

// 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 будет добавлять значения вместо их замены.

Смежные вопросы