уже второй день голову ломаю как решить данную проблему. Поиск к сожалению ничего не дает (может ищу неправильно). Задача следующая:
Массив с данными:
[19811] => Array
(
[Цветовая температура (K)] => Array
(
[0] => 3000
[1] => 4000
)
[Угол светораспределения] => Array
(
[0] => 15°
[1] => 30°
[2] => 50°
)
[Цвет корпуса] => Array
(
[0] => белый
[1] => серый
[2] => черный
)
)
Кол-во элементов во втором массиве и названия ключей произвольные, например в этом их 3 (температура, светораспределения, цвет). Могут быть любые название и любое кол-во элементов, например:
[19811] => Array (
[Мощность] => Array
(
[0] => 50
[1] => 60
)
[Цвет корпуса] => Array
(
[0] => белый
[1] => серый
[2] => черный
)
)
Получается что может быть как 1 ключ, так и несколько с разными названиями. Кол-во элементов в каждом ключе тоже произвольное.
Задача в следующем, нужно чтобы каждому элементу соответствовали все элементы следующих ключей т.е. берем кол-во вариаций температура (2)* угол(3) * цвет(3), получается 18 вариаций вида:
[Цветовая температура (K)] => 3000
[Угол светораспределения] => 15
[Цвет корпуса] => белый
Следующий:
[Цветовая температура (K)] => 3000
[Угол светораспределения] => 15
[Цвет корпуса] => Серый
и тд, последний:
[Цветовая температура (K)] => 4000
[Угол светораспределения] => 50°
[Цвет корпуса] => Черный
Каким образом это можно сделать на PHP. Заранее спасибо если сможете помочь. Важна реализация именно на PHP
Благодаря splash58 (гигансткий плюс ему к карме) был найден правильный ответ, вот код функции которая возвращает нужный массив.
function cartesian(array $input)
{
$result = [[]];
foreach ($input as $key => $values) {
$append = [];
foreach ($values as $value) {
foreach ($result as $data) {
$append[] = $data + [$key => $value];
}
}
$result = $append;
}
return $result;
}
Подробное обсуждение видно тут, там же есть и другие варианты
<?php
$arr = array(
'19811'=> array(
'Цветовая температура (K)' => array(
'0' => '3000',
'1' => '4000'
),
'Угол светораспределения' => array(
'0' => '15°',
'1' => '30°',
'2' => '50°'
),
'Цвет корпуса' => array(
'0' => 'белый',
'1' => 'серый',
'2' => 'черный'
)
)
);
foreach ($arr as $key => $value) {
# code...
for ($i = 0; $i <3 ; $i++) {
# code...
foreach ($value['Цвет корпуса'] as $key0 => $value1) {
# code...
$data[] = array(
'id' => $key,
'НАЗВАНИЕ' => 'TOP LED Lens 13W',
'Тип источника света' => 'Светодиод (LED)',
'Мощность (Вт)' => '13',
'Световой поток (lm)' => '1470',
'Цена' => '0',
'Цветовая температура (K)' => $value['Цветовая температура (K)'][$i],
'Угол светораспределения' => $value['Угол светораспределения'][$i],
'Цвет корпуса' => $value1
);
}
}
}
print_r($data);
примерно так
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab