Объединить два массива по ключу - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть два массива:

Array
(
[15407] => Array
    (
        [id] => 15407
        [group] => 9083
        [value] => 60.00000
    )

[15473] => Array
    (
        [id] => 15473
        [group] => 9109
        [value] => -15.000000
    )

[15474] => Array
    (
        [id] => 15474
        [group] => 9109
        [value] => -20.000000
    )
)

Array
(
[15407] => Array
    (
        [id] => 15407
        [group] => 9083
        [value_prev] => 100.000000
    )

[15474] => Array
    (
        [id] => 15474
        [group] => 9109
        [value_prev] => -100.000000
    )

)

Я пытаюсь объединить эти массивы по ключу и добавить новый элемент (value_prev), если совпадает, или 0, если не существует, поэтому мне нужно эти массивы:

Array
(
[15407] => Array
(
    [id] => 15407
    [group] => 9083
    [value] => 60.00000
    [value_prev] => 100.000000
)

[15473] => Array
(
    [id] => 15473
    [group] => 9109
    [value] => -15.000000
    [value_prev] => 0
)

[15474] => Array
(
    [id] => 15474
    [group] => 9109
    [value] => -20.000000
    [value_prev] => -100.000000
)
)

Я пытался использовать функцию array_keys, но не смог получить требуемый массив. Я нашел какое-то решение, но оно мне не помогло, потому что структура массивов не одинакова.

1 Ответ

1 голос
/ 21 апреля 2020

Поскольку массивы являются ассоциативными, это очень простая задача.

L oop массив один и посмотреть, существует ли ключ в массиве 2, если он копирует значение, иначе добавьте значение 0.

$keys = array_keys($arr2);

foreach($arr1 as $key => &$sub){
    if(in_array($key, $keys)){
        $sub["value_prev"] = $arr2[$key]["value_prev"];
    }else{
        $sub["value_prev"] = 0;
    }
}
...