如何在PHP中生成多个数组中所有项的组合

如何在PHP中生成多个数组中所有项的组合

我试图在几个数组中找到所有项目的组合。数组的数目是随机的(这可以是2,3,4,5.)。每个数组中的元素数也是随机的.

举个例子,我有三个数组:

$arrayA = array('A1','A2','A3');$arrayB = array('B1','B2','B3');$arrayC = array('C1','C2');

我想要生成一个3x3x2=18个组合的数组:

  • A1,B1,C1
  • A1,B1,C2
  • A1,B2,C1
  • A1,B2,C2
  • A1,B3,C1
  • A1,B3,C2
  • A2,B1,C1
  • A2,B1,C2.

问题是要创建一个具有可变数量的源数组的函数.


千巷猫影
浏览 1157回答 3
3回答

斯蒂芬大帝

下面是递归解决方案: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')         )     ));

呼啦一阵风

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;}

犯罪嫌疑人X

这段代码除了简单外,还可以获得多个数组的所有组合并保留键。function&nbsp;get_combinations($arrays)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;array(array()); &nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;($arrays&nbsp;as&nbsp;$property&nbsp;=>&nbsp;$property_values)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp&nbsp;=&nbsp;array(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;($result&nbsp;as&nbsp;$result_item)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;($property_values&nbsp;as&nbsp;$property_key&nbsp;=>&nbsp;$property_value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp[]&nbsp;=&nbsp;$result_item&nbsp;+&nbsp;array($property_key&nbsp;=>&nbsp;$property_value); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;$tmp; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$result;}例:Array( &nbsp;&nbsp;&nbsp;&nbsp;Array &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'1'&nbsp;=>&nbsp;'White', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'2'&nbsp;=>&nbsp;'Green', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'3'&nbsp;=>&nbsp;'Blue' &nbsp;&nbsp;&nbsp;&nbsp;), &nbsp;&nbsp;&nbsp;&nbsp;Array &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'4'&nbsp;=>'&nbsp;Small', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'5'&nbsp;=>&nbsp;'Big' &nbsp;&nbsp;&nbsp;&nbsp;))将返回:Array( &nbsp;&nbsp;&nbsp;&nbsp;[0]&nbsp;=>&nbsp;Array &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[1]&nbsp;=>&nbsp;White &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[4]&nbsp;=>&nbsp;&nbsp;Small &nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;[1]&nbsp;=>&nbsp;Array &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[1]&nbsp;=>&nbsp;White &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5]&nbsp;=>&nbsp;Big &nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;[2]&nbsp;=>&nbsp;Array &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[2]&nbsp;=>&nbsp;Green &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[4]&nbsp;=>&nbsp;&nbsp;Small &nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;[3]&nbsp;=>&nbsp;Array &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[2]&nbsp;=>&nbsp;Green &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5]&nbsp;=>&nbsp;Big &nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;[4]&nbsp;=>&nbsp;Array &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[3]&nbsp;=>&nbsp;Blue &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[4]&nbsp;=>&nbsp;&nbsp;Small &nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;[5]&nbsp;=>&nbsp;Array &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[3]&nbsp;=>&nbsp;Blue &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5]&nbsp;=>&nbsp;Big &nbsp;&nbsp;&nbsp;&nbsp;))
打开App,查看更多内容
随时随地看视频慕课网APP