这是我的数组:
[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-短颈-体形
红-28-短颈-帝国腰
红-28-短颈-高-低
红-28-全颈-体形
红-28-全颈-帝国腰部
红-28-全颈-高-低
红-28-圆颈-体形
红-28-圆领-帝国腰部
红-28-圆颈-高-低
红-30-短颈-体形
红-30-短颈-帝国腰部
红-30-短颈-高-低
红-30-全颈-体形
红-30-全颈-帝国腰部
红-30-全颈-高-低
红-30-圆颈-体形
红-30-圆领-帝国腰部
红-30-圆颈-高-低
等等..。
对于每一个价值
谢谢
发布于 2018-09-15 16:49:32
可以使用递归函数构建结果数组,例如:
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);发布于 2018-09-15 16:44:14
您可以在注释中的线程中使用笛卡儿()函数,或者像这样的简单例程:
$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不是很漂亮,但应该完成单个用例的工作。
发布于 2018-09-15 17:43:17
考虑到你的数组:
$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个条目的数组,表示所有组合。
https://stackoverflow.com/questions/52346501
复制相似问题