Сложить два массива php

125
29 марта 2021, 23:10

есть два массива:

Array
(
    [1] => Array
        (
            [date_create] => 2019-07-11 10:10:59
            [id] => 40604334
        )
    [2] => Array
        (
            [date_create] => 2019-07-11 09:15:11
            [id] => 40603954
        )
    [3] => Array
        (
            [date_create] => 2019-07-11 08:11:51
            [id] => 40603720
        )
)
Array
(
    [1] => Array
        (
            [0] => текст
            [1] => 2019-07-11 10:41:55
            [2] => link
            [id] => 40604334
        )
    [2] => Array
        (
            [0] => текст
            [1] => 2019-07-11 09:55:09
            [2] => link
            [id] => 40545434
        )
    [3] => Array
        (
            [0] => текст
            [1] => 2019-07-11 09:32:10
            [2] => link
            [id] => 40556772
        )
    [4] => Array
        (
            [0] => текст
            [1] => 2019-07-11 09:22:18
            [2] => link
            [id] => 40603954
        )
)

Как сделать так, чтобы взять id из второго массива, найти его в первом массиве и добавить deate_create во второй массив (в нужную ячейку массива)?

Answer 1

Ваша задача решается следующим способом:

foreach ($data1 as $array1) {
    foreach ($data2 as $key => $array2) {
        if ($array1['id'] == $array2['id']) {
            // Как я понял, дата во втором массиве хранится в элементе с индексом '1'
            $data2[$key][1] = $array1['date_create'];
            break;
        }
    }
}
Answer 2

сделайте из второго массива ассоциативный с датами

$arr2 = array_column($arr2, 'id', 1);

получите значения вида [ 40604334 => '2019-07-11 10:41:55']

затем пройдитесь по первому, и замените значения

foreach($arr1 as &$v){
   $v['date_create'] = $arr2[$v['id']]; 
}

можно варианты предложить со всякими там array_map и прочими array_intersect_key, но это все будет куда сложнее выглядеть и поэтому не имеет смысла.

Answer 3

Еще вариант:

$e = array_column($array1, null, 'id');
$output = array_map(
    function ($itm) use ($e) {
        $id = $itm['id'];
        if (isset($e[$id])) {
            $itm[1] = $e[$id]['date_create'];
        }
        return $itm;
    },
    $array2
);

DEMO

READ ALSO
Почему PHPDebug в VScode не видит локальный сайт на Docker

Почему PHPDebug в VScode не видит локальный сайт на Docker

Развернул сайт на Docker, но не могу сконнектить IDE VSCode c моим PHP серверомПосмотрел кучу мануалов, но даже не знаю где посмотреть ошибки от этого...

87
Авторизация на Laravel через сторонние API

Авторизация на Laravel через сторонние API

Есть сайт на Laravel, и есть API, которые расположены на другом сервере, они выполняют все функции ЛК от регистрации до пополнения баланса и прочими...

122
Ошибка при загрузке файлов Yii2:Call to undefined method UploadForm::formName()

Ошибка при загрузке файлов Yii2:Call to undefined method UploadForm::formName()

Я использую виджет kartik yii2-widget-fileinputВо вью вставил следующий код:

105
В чем заключается ошибка

В чем заключается ошибка

Выдает ошибку:

115