找到一个阵列的元件的所有可能的唯一组合在PHP [重复](Find all possible uni

2019-07-23 08:21发布

这个问题已经在这里有一个答案:

  • 寻找一个数组的子集在PHP 3个回答

我所知道的覆盖这个话题(例如几个问题在这里 ),但他们没有(至少从我发现了什么)做什么,我需要。

说我有3个元素的阵列[1, 2, 3] 我需要找出所有可能的唯一组合(不包括这样的排列,就像这里 ),包括重复元素的人。 所以结果应该是:

[1]
[2]
[3]
[1, 1]
[1, 2]
[1, 3]
[2, 2]
[2, 3]
[3, 3]
[1, 1, 1]
[1, 1, 2]
[1, 1, 3]
[1, 2, 2]
[1, 2, 3]
[1, 3, 3]
[2, 2, 2]
[2, 2, 3]
[2, 3, 3]
[3, 3, 3]

排除像子集[3, 2, 1][2, 1, 3]即是同样的事情[1, 2, 3]

我怎样才能做到这一点?

Answer 1:

使用递归快速的解决方案,可能不会做到这一点的最好办法,但它能够完成任务。

<?php

$arr = array(1,2,3);
$result = array();

function combinations($arr, $level, &$result, $curr=array()) {
    for($i = 0; $i < count($arr); $i++) {
        $new = array_merge($curr, array($arr[$i]));
        if($level == 1) {
            sort($new);
            if (!in_array($new, $result)) {
                $result[] = $new;          
            }
        } else {
            combinations($arr, $level - 1, $result, $new);
        }
    }
}
for ($i = 0; $i<count($arr); $i++) {
    combinations($arr, $i+1, $result);
}

// TEST
foreach ($result as $arr) {
    echo join(" ", $arr) . '<br>';
}

?>


文章来源: Find all possible unique combinations of elements of an array in PHP [duplicate]