слияние двух массивов из json

Приветствую!

Есть json вида

Код (Javascript):
  1. «PROPERTIES»: {
  2.         «CRI»: «, 80»,
  3.         «IP»: «IP66»,
  4.         «Высота»: «6 см»,
  5.         «Высота в упаковке»: «8 см»,
  6.         «Гарантия»: «5 лет»,
  7.         «Длина»: «6.45 см»,
  8.         «Длина в упаковке»: «10 см»,
  9.         «КСС»: «Г10х60, Г30, Г40, Г60, Г80, К10, К15, К8»,
  10.         «Класс защиты»: «2»,
  11.         «Коэффициент мощности драйвера, λ»: «≥0,5»,
  12.         «Коэффициент пульсаций светового потока, %»: «≤5»,
  13.         «Крепление»: «поворотное крепление»,
  14.         «Масса»: «0.146 кг»,
  15.         «Мощность»: «3 Вт»,
  16.         «Объем в упаковке»: «0.001 м3»,
  17.         «Световой поток»: «0 — 249 лм»,
  18.         «Температура эксплуатации»: «от -60 до +50 °C»,
  19.         «УХЛ»: «УХЛ1»,
  20.         «Цветовая температура»: «B (голубой), G (зеленый), R (красный), 3000K, 4000K, 5000K»,
  21.         «Частота»: «50 Гц»,
  22.         «Ширина»: «6.87 см»,
  23.         «Ширина в упаковке»: «10 см»
  24.       }

и несколько SKU вида

Код (Javascript):
  1. «SKU»: [
  2.         {
  3.           «CRI»: «80»,
  4.           «IP»: «IP66»,
  5.           «Артикул»: «MS3-2132-123-128»,
  6.           «Высота»: «6 см»,
  7.           «Высота в упаковке»: «8 см»,
  8.           «Длина»: «6.45 см»,
  9.           «Длина в упаковке»: «10 см»,
  10.           «КСС»: «Г10х60»,
  11.           «Класс защиты»: «2»,
  12.           «Крепление»: «поворотное крепление»,
  13.           «Масса»: «0.146 кг»,
  14.           «Мощность»: «3 Вт»,
  15.           «Объем в упаковке»: «0.001 м3»,
  16.           «Световой поток»: «200 лм»,
  17.           «Тип рассеивателя»: «прозрачный рассеиватель»,
  18.           «УХЛ»: «УХЛ1»,
  19.           «Цветовая температура»: «3000K»,
  20.           «Цена»: «4 000»,
  21.           «Ширина»: «6.87 см»,
  22.           «Ширина в упаковке»: «10 см»
  23.         },
  24.         {
  25.           «CRI»: «80»,
  26.           «IP»: «IP66»,
  27.           «Артикул»: «MS3-2142-123-128»,
  28.           «Высота»: «6 см»,
  29.           «Высота в упаковке»: «8 см»,
  30.           «Длина»: «6.45 см»,
  31.           «Длина в упаковке»: «10 см»,
  32.           «КСС»: «Г10х60»,
  33.           «Класс защиты»: «2»,
  34.           «Крепление»: «поворотное крепление»,
  35.           «Масса»: «0.146 кг»,
  36.           «Мощность»: «3 Вт»,
  37.           «Объем в упаковке»: «0.001 м3»,
  38.           «Световой поток»: «211 лм»,
  39.           «Тип рассеивателя»: «прозрачный рассеиватель»,
  40.           «УХЛ»: «УХЛ1»,
  41.           «Цветовая температура»: «4000K»,
  42.           «Цена»: «3 600»,
  43.           «Ширина»: «6.87 см»,
  44.           «Ширина в упаковке»: «10 см»
  45.         }
  46. ]

для каждого SKU делаю так

PHP:
  1. foreach($json[‘products’] as $k => &$product) {
  2.   $properties = $product[‘PROPERTIES’];
  3.   foreach($product[‘SKU’] as $n => $sku) {
  4.     foreach($properties as $name => $value) {
  5.       if(!array_key_exists($name, $product[‘SKU’][$n])) {
  6.         $product[‘SKU’][$n][$name] = $value;
  7.       }
  8.     }
  9.   }
  10. }

ну и получаю

Код (Javascript):
  1. «SKU»: [
  2.         {
  3.           «CRI»: «80»,
  4.           «IP»: «IP66»,
  5.           «Высота»: «6 см»,
  6.           «Высота в упаковке»: «8 см»,
  7.           «Гарантия»: «5 лет»,
  8.           «Длина»: «6.45 см»,
  9.           «Длина в упаковке»: «10 см»,
  10.           «КСС»: «Г10х60»,
  11.           «Класс защиты»: «2»,
  12.           «Коэффициент мощности драйвера, λ»: «≥0,5»,
  13.           «Коэффициент пульсаций светового потока, %»: «≤5»,
  14.           «Крепление»: «поворотное крепление»,
  15.           «Масса»: «0.146 кг»,
  16.           «Мощность»: «3 Вт»,
  17.           «Объем в упаковке»: «0.001 м3»,
  18.           «Световой поток»: «0 — 249 лм»,
  19.           «Температура эксплуатации»: «от -60 до +50 °C»,
  20.           «УХЛ»: «УХЛ1»,
  21.           «Цветовая температура»: «B (голубой), G (зеленый), R (красный), 3000K, 4000K, 5000K»,
  22.           «Частота»: «50 Гц»,
  23.           «Ширина»: «6.87 см»,
  24.           «Артикул»: «MS3-2132-123-128»,
  25.           «Световой поток»: «200 лм»,
  26.           «Тип рассеивателя»: «прозрачный рассеиватель»,
  27.           «Цветовая температура»: «3000K»,
  28.           «Цена»: «4 000»
  29.         },
  30.         …
  31. ]

Вопрос. Как избежать дублей? Пример Цветовая температура
Заранее благодарен.

 

Вот в этом месте

Код (Text):
  1. if(!array_key_exists($name, $product[‘SKU’][$n])) {
  2.         $product[‘SKU’][$n][$name] = $value;
  3.       }

не совсем понятна логика.

 

если в массиве $product[‘SKU’][$n] нет ключа $name
были разные вариации

 

ОК. Зайдем с другой стороны.
Покажите массивы оригиналы (var_export()) и ожидаемый результат

 

закрывайте, пробелы разные.
upload_2023-9-20_12-50-35.png

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *