Вот мой массив:
[options] => Array
(
[1] => Array
(
[0] => Red
[1] => Yellow
[2] => Blue
[3] => Green
)
[2] => Array
(
[0] => 28
[1] => 30
[2] => 32
[3] => 34
)
[3] => Array
(
[0] => Short Neck
[1] => Full Neck
[2] => Round Neck
)
[5] => Array
(
[0] => Bodycon
[1] => Empire Waist
[2] => High-Low
)
)
Хотите создать строку, как это:
Красная 28-короткая шея-Bodycon
Красная 28-короткая шея
Красный-28-Короткая шея-Хай-Лоу
Red-28-Full Neck-Bodycon
Red-28-полный шеи-империи талии
Red-28-Full-Neck-High-Low
Red-28-шею-Bodycon
Красная 28-круглая шея-империя талии
Red-28-шею-хай-хай-лоу
Красный-30-короткий шеи-Bodycon
Red-30-шея-империя талии
Красный-30-короткий шею-хай-лоу
Red-30-Full Neck-Bodycon
Red-30-полный шеи-империи талии
Red-30-Full-Neck-High-Low
Red-30-шею-Bodycon
Красная шея с круглым вырезом
Red-30-шею-шею-Хай-Лоу
и так далее…
Для каждого значения
Спасибо
Вы можете использовать рекурсивную функцию для построения массива результатов, например:
function combine($arr) {
if (count($arr) === 1) {
return array_shift($arr);
}
$items = array_shift($arr);
$data = [];
foreach ($items as $item) {
foreach (combine($arr) as $value) {
$data[] = $item . ' ' . $value;
}
}
return $data;
}
и используя пример:
$items = [
[
'Red',
'Yellow',
'Blue',
'Green',
],
[
28,
30,
32,
34
],
[
'Short Neck',
'Full Neck',
'Round Neck'
],
[
'Bodycon',
'Empire Waist',
'High-Low'
]
];
$result = combine($items);
Вы можете использовать функцию cartesian () из потока в комментариях или простую подпрограмму, например:
$join = [];
foreach( $myarray[ 'options' ] as $block ) :
foreach( $block as $i => $value ) :
$join[ $i ][] = $value;
endforeach;
endforeach;
foreach( $join as $string ) :
echo implode( '-', $string ) . '<br>';
endforeach;
Выход:
Red-28-Short Neck-Bodycon
Yellow-30-Full Neck-Empire Waist
Blue-32-Round Neck-High-Low
Green-34
Не очень красиво, но нужно выполнить работу для одного случая использования.
Учитывая ваш массив:
$items = [
1=>[
'Red',
'Yellow',
'Blue',
'Green',
],
2=>[
28,
30,
32,
34
],
3=>[
'Short Neck',
'Full Neck',
'Round Neck'
],
5=>[
'Bodycon',
'Empire Waist',
'High-Low'
]
];
Это самый простой и менее затратный способ его достижения
$items=array_values($items);
$result=[];
foreach($items[0] as $k1=>$v1){
foreach($items[1] as $k2=>$v2){
foreach($items[2] as $k3=>$v3){
foreach($items[3] as $k4=>$v4){
$result[]=$v1.' '.$v2.' '.$v3.' '.$v4;
}
}
}
}
Учитывая ваш массив, если вы хотите удалить шаг из кода выше, вы можете использовать вместо
$result=[];
foreach($items[1] as $k1=>$v1){
foreach($items[2] as $k2=>$v2){
foreach($items[3] as $k3=>$v3){
foreach($items[5] as $k4=>$v4){
$result[]=$v1.' '.$v2.' '.$v3.' '.$v4;
}
}
}
}
Обратите внимание, что мы удаляем шаг array_values
Эти коды выводят массив из 144 записей, представляющих все комбинации в ожидаемом порядке.