举例说明
数组如下 :
[123,345,567,1235,6435,77,33,444,555,666,111,999,19,101,5542]
要求出所有用这个数组中的元素(三个)组成出的所有组合,组合例如下
123,345,567
1235,6435,77
33,444,555
666,111,999
111,999,19
。。。
n多种组合,每个组合是不重复(可以有这种情况 123,345,567 345,123,567即顺序不同)的
<?php
function getCombinationToString($arr, $m) {
if ($m == 1) {
return $arr;
}
$result = [];
$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) {
$val = $s . ',' . $row;
$val = explode(',', $val);
sort($val);
$val = implode(',', $val);
if(! in_array($s, explode(',', $row)) && ! in_array($val, $result)) {
$result[] = $val;
}
}
}
return $result;
}
$arr = [123, 345, 567, 1235, 6435, 77, 33, 444, 555, 666, 111, 999, 19, 101, 5542];
$t = getCombinationToString($arr, 3);
echo '<pre>';print_r($t);
求解,哪位老大帮帮忙
示例:
<?php
$data = [123, 345, 567, 1235, 6435, 77, 33, 444, 444, 123, 555, 666, 111, 999, 19, 101, 5542];
// 生成
$items = generate($data);
foreach ($items as $item) {
echo implode("\t", $item) . PHP_EOL;
}
function generate($data)
{
// 排序
sort($data);
// 去重
$data = array_unique($data);
$data = array_values($data);
// 打印原始字符串
echo implode(", ", $data) . PHP_EOL . PHP_EOL;
$items = [];
for ($i = 0; $i < count($data); $i++) {
for ($j = 0; $j < count($data); $j++) {
if ($j == $i) {
continue;
}
for ($k = 0; $k < count($data); $k++) {
if ($k == $j || $k == $i) {
continue;
}
$items[] = [$data[$i], $data[$j], $data[$k]];
}
}
}
return $items;
}
楼上是全组合,我加个全排列
https://3v4l.org/n4ZXT
参考:全排列和全组合实现