Как вставить элементы в существующий массив

Предположим, у меня есть два массива, как показано ниже

array:2 [
  0 => {#1995
    +"id": 6
    +"sales_target_amount": "30000.00"
  }
  1 => {#1996
    +"id": 10
    +"sales_target_amount": "1000.00"
  }
]

второй массив

array:2 [
  0 => {#1994
    +"sales_total": "4165.80"
    +"staff_id": 6
  }
  1 => {#1513
    +"sales_total": "1335.60"
    +"staff_id": 10
  }
]

Я пытаюсь вставить первый массив sales_target_amount во второй массив, если id соответствует staff_id.

код

  $sum = array_merge($second_array[],$firs_array);

Приведенный выше код объединит два массива вместе, но не вставит элементы на основе идентификатора.

ожидаемый результат

array:2 [
      0 => {#1994
        +"sales_total": "4165.80"
        +"staff_id": 6
        +"sales_target_amount": "30000.00"
      }
      1 => {#1513
        +"sales_total": "1335.60"
        +"staff_id": 10
        +"sales_target_amount": "1000.00"
      }
    ]

вы хотите объединить два массива по условию, но где вы поставили условие? Я полагаю, что вы бы выбрали обход обоих массивов и объединили их, если идентификатор совпадает. Надеюсь, вы так много знаете о программировании.

anuj arora 30.05.2019 07:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
59
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Используйте хешированную карту для группировки значений по staff_id

<?php
$arr1 = [
    [
        'id' => 6,
        'sales_target_amount' => '30000.00'
    ],
    [
        'id' => 10,
        'sales_target_amount' => '1000.00'
    ]
];

$arr2 = [
    [
        'sales_total' => '4165.80',
        'staff_id' => 6
    ],
    [
        'sales_total' => '1335.60',
        'staff_id' => 10
    ]
];

$results = [];

foreach ($arr1 as $value) {
    $results[$value['id']] = [
        'sales_target_amount' => $value['sales_target_amount']
    ];
}

foreach ($arr2 as $value) {
    $results[$value['staff_id']] = array_merge($results[$value['staff_id']], $value);
}

print_r(array_values($results));

array_merge() не работает с многомерным массивом. Попробуйте использовать array_merge_recursive().

И вам не нужно использовать квадратные скобки в этом контексте. Выполнить функцию так же, как

$sum = array_merge_recursive($second_array, $firs_array);
Ответ принят как подходящий

Вот фрагмент, пожалуйста, смотрите встроенный документ для объяснения

$arr = [
    0 => ["sales_total" => "4165.80", "staff_id" => 6],
    1 => ["sales_total" => "1335.60", "staff_id" => 10],
];
$arr1 = [
    0 => ["id" => 6, "sales_target_amount" => "30000.00"],
    1 => ["id" => 10, "sales_target_amount" => "1000.00"],
];
//NULL to return complete arrays or objects and staff id will be key
$arr = array_column($arr, null, 'staff_id');
// mapping id sales target amount combination
$temp = array_column($arr1, 'sales_target_amount', 'id');
foreach ($arr as $key => $value) {
    $arr[$key]['sales_target_amount'] = $temp[$key]; // putting sales_target_amount for id
}

столбец_массива — возвращает значения из одного столбца во входном массиве

Демонстрационная ссылка.

Сортировать ответ, используя эта библиотека

$array = array_merge_recursive(
  Arr::flattenSingle(Arr::group($array1, 'id')), 
  Arr::flattenSingle(Arr::group($array2, 'staff_id'))
);

Что он делает ниже, так это сначала группирует ваши массивы по столбцу, по которому вы хотите их объединить. Затем, поскольку каждый элемент в группе будет иметь только один соответствующий массив (поскольку они сгруппированы по уникальному идентификатору), объедините эти группы, чтобы создать массив с такими элементами, как id => array_with_that_id. А затем объединить эти сглаженные группы по ключам, которые в данном случае являются идентификаторами.

В целом это даст

Array (
  [6] => Array (
    [id] => 6
    [sales_total] => 4165.8
    [staff_id] => 6
    [sales_target_amount] => 30000
  )
  [10] => Array (
    [id] => 10
    [sales_total] => 1335.6
    [staff_id] => 10
    [sales_target_amount] => 1000
  ) 
)

Другие вопросы по теме