php - 如何在 PHP 中生成具有不同元素编号的多个数组中的所有项目组合
问题描述
我试图在几个数组中找到所有项目的组合。数组的数量是随机的(可以是 2、3、4、5...)。每个数组中的元素数量也是随机的......
例如,我有 3 个数组:
$arrayA = array('A1','A2','A3',,'A4','A5','A6'); // (3 From here each time)
$arrayB = array('B1','B2','B3','B4','B5'); //(2 From here each time)
$arrayC = array('C1','C2'); // (1 From here each time)
我想生成一个数组 Like :
A1+A3+A5, B1+B5, C1
A1+A4+A5, B1+B4, C1
....
我试过这样,但我需要数组中的不同元素编号而不是每个数组中的一个元素。
<?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;
}
?>
输出:
数组([0] => 数组([0] => 蓝色 [1] => L [2] => 半色)
[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
)
)
我想要这样:
数组([0] => 数组([0] => 蓝色,红色,绿色 [1] => L,M [2] => 半色)
解决方案
你可以做这样的事情......
<?php
$variants = array();
$possible_letters = array('A','B','C');
$max_variant_number = 6;
foreach ($possible_letters as $possible_letter) {
$min_variant_number = 0;
while ($min_variant_number <= $max_variant_number) {
$variants[] = $possible_letters.$min_variant_number;
$min_variant_number++;
}
}
这只是 2 个循环,它们在数组和不断增加的数字之间进行一些连接,直到数字耗尽,然后它移动到下一个字母并重置该数字。请注意它是一个嵌套循环,因此N 平方的顺序将适用于您进入复杂性理论。
推荐阅读
- google-cloud-platform - Cloud Function 中的 GCP rsync 失败
- java - 为什么我的画布不绘制矩形
- conv-neural-network - CNN 训练运行没有错误,但它不显示结果
- javascript - 数据记录器中未找到心率数据 - Galaxy Watch
- c# - CrmServiceClient IsReady 在之前调用后为 false 和 null
- c# - 从 .Net Core 应用程序发送 WebRequest 时,为什么会出现超时错误?
- reactjs - 如何在不使用 JSX 的情况下从另一个组件访问函数
- matlab - 如屏幕截图所示,如何将此表转换为元胞数组?
- excel - 如何在 VBA 的 Range.Formula 中包含变量?
- angular - 加载外部模板