如何在PHP中生成多个数组中所有项的组合我试图在几个数组中找到所有项目的组合。数组的数目是随机的(这可以是2,3,4,5.)。每个数组中的元素数也是随机的.举个例子,我有三个数组:$arrayA = array('A1','A2','A3');$arrayB = array('B1','B2','B3');$arrayC = array('C1','C2');我想要生成一个3x3x2=18个组合的数组:A1,B1,C1A1,B1,C2A1,B2,C1A1,B2,C2A1,B3,C1A1,B3,C2A2,B1,C1A2,B1,C2.问题是要创建一个具有可变数量的源数组的函数.
3 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
function combinations($arrays, $i = 0) {
if (!isset($arrays[$i])) {
return array();
}
if ($i == count($arrays) - 1) {
return $arrays[$i];
}
// get combinations from subsequent arrays
$tmp = combinations($arrays, $i + 1);
$result = array();
// concat each array from tmp with each element from $arrays[$i]
foreach ($arrays[$i] as $v) {
foreach ($tmp as $t) {
$result[] = is_array($t) ?
array_merge(array($v), $t) :
array($v, $t);
}
}
return $result;}print_r(
combinations(
array(
array('A1','A2','A3'),
array('B1','B2','B3'),
array('C1','C2')
)
));
慕沐林林
TA贡献2016条经验 获得超9个赞
function array_cartesian_product($arrays){
$result = array();
$arrays = array_values($arrays);
$sizeIn = sizeof($arrays);
$size = $sizeIn > 0 ? 1 : 0;
foreach ($arrays as $array)
$size = $size * sizeof($array);
for ($i = 0; $i < $size; $i ++)
{
$result[$i] = array();
for ($j = 0; $j < $sizeIn; $j ++)
array_push($result[$i], current($arrays[$j]));
for ($j = ($sizeIn -1); $j >= 0; $j --)
{
if (next($arrays[$j]))
break;
elseif (isset ($arrays[$j]))
reset($arrays[$j]);
}
}
return $result;}
慕森王
TA贡献1777条经验 获得超3个赞
function get_combinations($arrays) {
$result = array(array());
foreach ($arrays as $property => $property_values) {
$tmp = array();
foreach ($result as $result_item) {
foreach ($property_values as $property_key => $property_value) {
$tmp[] = $result_item + array($property_key => $property_value);
}
}
$result = $tmp;
}
return $result;}例:
Array( Array ( '1' => 'White', '2' => 'Green', '3' => 'Blue' ), Array ( '4' =>' Small', '5' => 'Big' ))
将返回:
Array( [0] => Array ( [1] => White [4] => Small ) [1] => Array ( [1] => White [5] => Big ) [2] => Array ( [2] => Green [4] => Small ) [3] => Array ( [2] => Green [5] => Big ) [4] => Array ( [3] => Blue [4] => Small ) [5] => Array ( [3] => Blue [5] => Big ))
- 3 回答
- 0 关注
- 372 浏览
添加回答
举报
0/150
提交
取消
