Как объединить одинаковое значение одного массива с одинаковым ключом другого?
Всем доброго времени суток! Есть два массива:
array (
0 =>
array (
'id_product_attribute' => '123',
),
1 =>
array (
'id_product_attribute' => '122',
),
2 =>
array (
'id_product_attribute' => '118',
)
)
array (
123 =>
array (
'prices' =>
array (
'a' => 146.9,
'b' => true,
'c' => '-5',
),
),
122 =>
array (
'prices' =>
array (
'a' => 257.9,
'b' => true,
'c' => '-8',
),
),
118 =>
array (
'prices' =>
array (
'a' => 479.9,
'b' => true,
'c' => '-20',
),
)
)
Каким способом мне нужно проверить значение первого массива и добавить ключ со второго если они совпадают? Чтобы это было так
array (
0 =>
array (
'id_product_attribute' => '123',
'prices' =>
array (
'a' => 146.9,
'b' => true,
'c' => '-5',
)
),
1 =>
array (
'id_product_attribute' => '122',
'prices' =>
array (
'a' => 257.9,
'b' => true,
'c' => '-8',
),
),
2 =>
array (
'id_product_attribute' => '118',
'prices' =>
array (
'a' => 479.9,
'b' => true,
'c' => '-20',
),
)
)
Ответы (2 шт):
Для начала напишите код. Какой-то код у вас наверное уже написан, но речь не о нём. Напишите код, который создаёт первый массив из вашего примера. Начните с одного элемента.
<?php
$products = [
[
'id_product_attribute' => '123',
],
];
var_dump($products);
Сохраните это в файл test.php и запустите из консоли php test.php. Запускать код с экспериментами очень важно. Даже в таком простом коде могут быть ошибки, полезно узнать об этом заранее.
Окей. Теперь вы хотите добавить во вложенный массив prices. Как это сделать? Допустим prices у вас уже есть.
<?php
$products = [
[
'id_product_attribute' => '123',
],
];
$products[0]['prices'] = ['a' => 146.9, 'b' => true, 'c' => '-5'];
var_dump($products);
Запустите. Работает? Отлично, тогда едем дальше. Элементов $products может быть несколько, чтобы каждому добавить prices можно использовать циклы. Напишите код с циклом.
<?php
$products = [
[
'id_product_attribute' => '123',
],
[
'id_product_attribute' => '122',
],
];
foreach ($products as &$product) {
$product['prices'] = ['a' => 146.9, 'b' => true, 'c' => '-5'];
}
var_dump($products);
Надеюсь вы знаете, что это за & такой в коде. Разберитесь как менять значения массива в цикле, напишите код и обязательно убедитесь, что он работает.
Осталось немного. Цены у вас в отдельном массиве с ключами, которые могут совпадать со значениями id_product_attribute. Зная ключ, можно получить значение. Добавьте в код массив с ценами и установите продуктам соответствующие prices. Когда закончите, обязательно запустите код и убедитесь, что он работает как надо.
Обратите внимание, что код должен работать правильно и в том случае, если в массиве цен нет подходящего ключа. Для проверки существования значения можно использовать isset.
Из этого вы должны понять 3 важные вещи:
- php.net -- отличный источник информации о PHP, там много примеров, которые помогут вам понять как что работает.
- Если вы столкнулись с трудностями, изолируйте проблему -- создайте отдельный тестовый файлик и упростите задачу до тривиальной, затем усложняйте, пока не получите решение. Не пытайтесь экспериментировать в рабочем коде, там может быть много деталей, которые вас запутают.
- Всегда запускайте код, чтобы убедится, что он работает так, как вы ожидаете. Запускайте код как можно раньше и запускайте код как можно чаще.
Так должно сработать:
array_walk($array1, function(&$product) use ($array2) {
$product_id = $product['id_product_attribute'];
if (isset($array2[$product_id]['prices'])) {
$product['prices'] = $array2[$product_id]['prices'];
}
});