Php 如何从多个阵列获取所有组合?
假设我有这3个数组Php 如何从多个阵列获取所有组合?,php,arrays,matrix,combinations,Php,Arrays,Matrix,Combinations,假设我有这3个数组 $array1 = array(1,2); $array2 = array(4,5); $array3 = array(7,8); 我需要这个输出 1 4 7 1 4 8 1 5 7 1 5 8 2 4 7 2 4 8 2 5 7 2 5 8 我的一个问题是,我的数组myght从3到15个不同的数组不等,每个myght都是空的(我可能会添加一个0,但不是空的)或者有很多值。 如果我有一个空数组,我还需要将其计算为有效列。这些值将用于按特定顺序填充数据库 有什么方法可以做到
$array1 = array(1,2);
$array2 = array(4,5);
$array3 = array(7,8);
我需要这个输出
1 4 7
1 4 8
1 5 7
1 5 8
2 4 7
2 4 8
2 5 7
2 5 8
我的一个问题是,我的数组myght从3到15个不同的数组不等,每个myght都是空的(我可能会添加一个0,但不是空的)或者有很多值。
如果我有一个空数组,我还需要将其计算为有效列。这些值将用于按特定顺序填充数据库
有什么方法可以做到这一点吗?有多少种组合?
那么首先的问题是有多少种组合?答案是你必须将每个数组的数量相乘
So(c=数量1):
卡雷1*卡雷2*…*卡雷
并针对您的示例进行了具体说明:
卡雷1*卡雷2*卡雷3=2*2*2=8
*1如果您想知道为什么我选择c作为amount,因为php中的函数count()
将所有组合组合在一起
我们现在如何得到所有的数组数量的组合呢
我们循环遍历我们已经拥有的所有组合(从一个组合开始,一个“空组合”($combinations=[[]];
),对于每个组合,我们遍历下一个数据数组,并将每个组合与每个输入数据组合成一个新的组合
现在我们这样做,直到得到每个组合所需的长度
例如:
Array with the elements (Empty array is '[]'):
[
[1, 2],
[3, 4]
]
*南:不是数字
正如你在上面的例子中看到的,我们现在有了所有的组合,它们的长度是我们所有数组的长度
但是,为了只获得具有所需长度的组合,我们在每次迭代中都会覆盖结果数组,因此在最后,结果数组中只有具有所需长度的组合
代码:
对于关联阵列,您只需进行轻微修改,即:
array\u keys()
将数组键分配给变量,例如
$keys = array_keys($data);
foreach ($data[$count] as $v2)
致:
foreach($data[$keys[$count]]作为$v2)我为每个数组尝试了foreach()级联,但workLet看不到。在这里发布。我能做的最好的事情就是从这样的foreach($array1为$a1){$var.=$a1;foreach($array2为$a2){$var.=$a2;foreach($array3为$a3){$var.=$a3;}$var.='
;}但是我不知道如何用我需要的值填充第一列,那么这个问题我们在哪里?@Phil_1984_但是他的代码仍然不是很灵活。。
Array
(
[0] => Array
(
[0] => 1
[1] => 4
[2] => 7
)
//...
[7] => Array
(
[0] => 2
[1] => 5
[2] => 8
)
)
$keys = array_keys($data);
foreach ($data[$count] as $v2)
foreach ($data[$keys[$count]] as $v2)
<?php
$color = array('Blue','Red','Black','Green');
$size = array('L','M','S','XL','XXL');
$type = array('Half selevs','full seleves');
$options = [
$color,
$size,
$type,
];
$combinations = getCombinations($options);
print_r($combinations);
function getCombinations($options){
$combinations = [[]];
for ($count = 0; $count < count($options); $count++) {
$tmp = [];
foreach ($combinations as $v1) {
foreach ($options[$count] as $v2)
$tmp[] = array_merge($v1, [$v2]);
}
$combinations = $tmp;
}
return $combinations;
}
?>
Array
(
[0] => Array
(
[0] => Blue
[1] => L
[2] => Half selevs
)
[1] => Array
(
[0] => Blue
[1] => L
[2] => full seleves
)
[2] => Array
(
[0] => Blue
[1] => M
[2] => Half selevs
)
[3] => Array
(
[0] => Blue
[1] => M
[2] => full seleves
)
[4] => Array
(
[0] => Blue
[1] => S
[2] => Half selevs
)
[5] => Array
(
[0] => Blue
[1] => S
[2] => full seleves
)
[6] => Array
(
[0] => Blue
[1] => XL
[2] => Half selevs
)
[7] => Array
(
[0] => Blue
[1] => XL
[2] => full seleves
)
[8] => Array
(
[0] => Blue
[1] => XXL
[2] => Half selevs
)
[9] => Array
(
[0] => Blue
[1] => XXL
[2] => full seleves
)
[10] => Array
(
[0] => Red
[1] => L
[2] => Half selevs
)
[11] => Array
(
[0] => Red
[1] => L
[2] => full seleves
)
[12] => Array
(
[0] => Red
[1] => M
[2] => Half selevs
)
[13] => Array
(
[0] => Red
[1] => M
[2] => full seleves
)
[14] => Array
(
[0] => Red
[1] => S
[2] => Half selevs
)
[15] => Array
(
[0] => Red
[1] => S
[2] => full seleves
)
[16] => Array
(
[0] => Red
[1] => XL
[2] => Half selevs
)
[17] => Array
(
[0] => Red
[1] => XL
[2] => full seleves
)
[18] => Array
(
[0] => Red
[1] => XXL
[2] => Half selevs
)
[19] => Array
(
[0] => Red
[1] => XXL
[2] => full seleves
)
[20] => Array
(
[0] => Black
[1] => L
[2] => Half selevs
)
[21] => Array
(
[0] => Black
[1] => L
[2] => full seleves
)
[22] => Array
(
[0] => Black
[1] => M
[2] => Half selevs
)
[23] => Array
(
[0] => Black
[1] => M
[2] => full seleves
)
[24] => Array
(
[0] => Black
[1] => S
[2] => Half selevs
)
[25] => Array
(
[0] => Black
[1] => S
[2] => full seleves
)
[26] => Array
(
[0] => Black
[1] => XL
[2] => Half selevs
)
[27] => Array
(
[0] => Black
[1] => XL
[2] => full seleves
)
[28] => Array
(
[0] => Black
[1] => XXL
[2] => Half selevs
)
[29] => Array
(
[0] => Black
[1] => XXL
[2] => full seleves
)
[30] => Array
(
[0] => Green
[1] => L
[2] => Half selevs
)
[31] => Array
(
[0] => Green
[1] => L
[2] => full seleves
)
[32] => Array
(
[0] => Green
[1] => M
[2] => Half selevs
)
[33] => Array
(
[0] => Green
[1] => M
[2] => full seleves
)
[34] => Array
(
[0] => Green
[1] => S
[2] => Half selevs
)
[35] => Array
(
[0] => Green
[1] => S
[2] => full seleves
)
[36] => Array
(
[0] => Green
[1] => XL
[2] => Half selevs
)
[37] => Array
(
[0] => Green
[1] => XL
[2] => full seleves
)
[38] => Array
(
[0] => Green
[1] => XXL
[2] => Half selevs
)
[39] => Array
(
[0] => Green
[1] => XXL
[2] => full seleves
)
)