#php #arrays
#php #массивы
Вопрос:
Каков наилучший способ объединить два массива путем сопоставления значений в ключах в каждом массиве. Например, у меня есть два массива:
Array
(
[id] => 1
[name] => Apple
[color] => Green
)
(
[id] => 2
[name] => Banana
[color] => Yellow
)
(
[id] => 3
[name] => Tomato
[color] => Red
)
Array
(
[product_id] => 1
[price] => 0.50
[weight] => 50
)
(
[product_id] => 2
[price] => 0.99
[weight] => 80
)
(
[product_id] => 3
[price] => 0.35
[weight] => 40
)
И я хочу объединить, где ‘id’ = ‘product_id’ для получения:
Array
(
[id] => 1
[name] => Apple
[color] => Green
[price] => 0.50
[weight] => 50
)
(
[id] => 2
[name] => Banana
[color] => Yellow
[price] => 0.99
[weight] => 80
)
(
[id] => 3
[name] => Tomato
[color] => Red
[price] => 0.35
[weight] => 40
)
Ответ №1:
Для этого вам нужно будет написать пользовательскую функцию. Например:
<?php
function combine_arrays($array1,$array2){
$merged_array = array();
for($i=0; $i<count($array1); $i )
{
if($array1[$i]['id'] == $array2[$i]['product_id'])
{
$merged_array[] = array_merge($array1[$i],$array2[$i]);
}
}
return $merged_array;
}
?>
Ответ №2:
Итак, в этом случае я бы создал два новых массива, добавив идентификатор в качестве индекса, вот так:
$newArray1 = array();
$newArray2 = array();
foreach ($array1 as $key => $value) { $newArray1[$value['id']] = $value; }
foreach ($array2 as $key => $value) { $newArray2[$value['product_id']] = $value; }
После этого легко объединить массивы:
foreach ($array1 as $key => $value)
{
if (is_array($array1[$key]) amp;amp; is_array($array2[$key]))
{
$result[] = array_merge($array1[$key], $array2[$key]);
}
}
(Возможно, вам придется добавить дополнительные проверки, если два массива не содержат один и тот же пул идентификаторов или количество целых значений отличается)