在某个业务场景中 我们需要对其数组中的数据进行两两比较,此时 我们很希望将其所有元素进行两两排列组合 此处已实现 源代码如下:
<?php
$arr = array('a','b','c','d');
$result = array();
function processingPermutations($arr,$group_num=2){
$res = [];
$temp = getCombinationToString($arr, $group_num);
foreach($temp as $key=>$val){
$res[] = explode("|",$val);
}
return $res;
}
echo "<pre>";
print_r(processingPermutations($arr,2));
die;
function getCombinationToString($arr, $m) {
if ($m ==1) {
return $arr;
}
$result = array();
$tmpArr = $arr;
unset($tmpArr[0]);
for($i=0;$i<count($arr);$i++) {
$s = $arr[$i];
$ret = getCombinationToString(array_values($tmpArr), ($m-1), $result);
foreach($ret as $row) {
if($s!=$row){
$str = $s."|".$row;
$t = explode('|', $str);
$exchange = trim($t[1]) . '|' .trim($t[0]);
$key = array_search($exchange,$result);
if(!$key){
$result[] = $str;
}
}
}
}
return $result;
}
输出结果如下:
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => a
[1] => c
)
[2] => Array
(
[0] => a
[1] => d
)
[3] => Array
(
[0] => b
[1] => c
)
[4] => Array
(
[0] => b
[1] => d
)
[5] => Array
(
[0] => c
[1] => d
)