ассоциативный массив — декартово произведение с PHP (id, имя, варианты)

Можете ли вы помочь мне с созданием Caresian продукта.
Это похоже на этот стекопоток. Я хочу генерировать входные данные, поэтому мне нужно сохранить ID.

Пример:

мои входные данные:

[
1 => [
id => 1,
name => "Color",
options => [
5 => [
id => 5,
name => "Red"],
6 => [
id => 6,
name => "Blue"]
]
],
2 => [
id => 2,
name => "Size",
options => [
7 => [
id => 7,
name => "S"],
8 => [
id => 8,
name => "M"]
]
],

// etc
]

результат ожидаю:

[
"5-7" => "Red / S",
"5-8" => "Red / M",
"6-7" => "Blue / S",
"6-8" => "Blue / M"]

Мне нужна универсальная функция для любого количества свойств / опций ..

-2

Решение

Вложенный цикл man, каждая запись массива 1 должна быть связана с каждой записью массива 2.

$ finalArray = array ();

foreach (array1 as $key1 as $value1){
foreach (array2 as $key2 as$value2){
echo  $value1 . " - " .$value2."<br/>";
$finalArray[$key1.'-'.$key2] =   $value1 ." - ".$value2;
}
}

finalArray будет иметь то, что вам нужно.

0

Другие решения

На данный момент это действительно рабочий код, но я не знаю, насколько он эффективен.

// filter out properties without options
$withOptions = array_filter($properties, function($property) {
return count($property['options']) > 0;
});

$result = [];

$skipFirst = true;

foreach ($withOptions as $property) {

if ($skipFirst) {

foreach (reset($withOptions)['options'] as $id => $option) {
$result[$id] = $option['name'];
}

$skipFirst = false;
continue;
}

foreach ($result as $code => $variant) {
foreach ($property['options'] as $id => $option) {
$new = $code . "-" . $id;
$result[$new] = $variant . " / " . $option['name'];
unset($result[$code]);
}
}
}
0