Есть два массива:
$products
$attributes
В массивах содержится одинаковое количество элементов. Их может быть до 500 000 элементов.
Необходимо их объединить в один массив, чтобы потом можно было работать с ним. У них есть связующий элемент: product_id
Массив продуктов
$products = array(
[0] = array(
[product_id] => 102966
[price] => 11
)
[1] = array(
[product_id] => 102967
[price] => 22
)
)
Массив атрибутов
$attributes= array(
[0] = array(
[product_id] => 102966
[attr_name] => Диагональ;Длительность ролика
[attr_value] => 2";1 мин, 2 мин, 3 мин, 5 мин
)
[1] = array(
[product_id] => 102967
[attr_name] => Выходы;Диагональ;Дополнительная информация
[attr_value] => HDMI;2.7";рабочие диапазоны
)
)
Подскажите, как их объединить с учетом, чтобы это работало не слишком долго и не съело всю память
Есть решение: Но ест много ресурсов...
$products = array_map(function($product) use ( $attributes ) {
$attribute = array_filter($attributes, function($attribute) use ( $product ) {
return $attribute['product_id'] === $product['product_id'];
});
return array_merge($attribute ? current($attribute) : [], $product);
}, $products);
print_r($products);
Для каких целей это делается? Запрос к данному массиву будет у каждого юзера на сайте постоянно? Например при открытии корзины или страницы товаров?
Если да, то лучше создать отдельный файл, который выполняет ваш "ресурсоемкий код" и далее записывает построчный результат (соедененныого массива) в некую новую таблицу в базе. Установить этот файл в crontab и пускайте он запускается раз в минуту, раз в час и т.д. Время можете установить исходя из вероятности обновления $products и $attributes.
Как понимаем, речь об интернет магазине и вряд ли прям каждую минуту будут добавляться товары или новые атрибуты.
Ну а для самого пользователя выборка будет с конкретной таблице (а лучше к кешу) с уже готовым общим массивом.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости