Предположим, у меня есть два массива, как показано ниже
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"
}
]
Используйте хешированную карту для группировки значений по 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
)
)
вы хотите объединить два массива по условию, но где вы поставили условие? Я полагаю, что вы бы выбрали обход обоих массивов и объединили их, если идентификатор совпадает. Надеюсь, вы так много знаете о программировании.