这是我的数组:
[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
)
)
想要创建这样的字符串:
Red-28-Short Neck-Bodycon
Red-28-Short Neck-Empire腰围
红色28短脖子高低
Red-28-Full Neck-Bodycon
红色28全颈帝国腰
红色28全颈高低
红28圆脖子上的健美操
28圆领红色帝国腰围
红色28圆脖子高低
红色30短脖子上的Bodycon
红色30短颈帝国腰
红色30短脖子高低
红色30-全颈Bodycon
红色30全颈帝国腰
红色30全颈高低
红色30字形脖子防弹衣
红色30圆脖子帝国腰围
红色30圆脖子-高-低
等等...
对于每个值
谢谢
答案 0 :(得分:1)
您可以使用递归函数来构建结果数组,例如:
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);
答案 1 :(得分:0)
您可以在注释中的线程中使用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
不太漂亮,但是应该在单个用例中完成工作。
答案 2 :(得分:0)
给出您的数组:
$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个条目的数组,这些数组代表按预期顺序的所有组合。