douwei3172 2013-03-25 21:00
浏览 113
已采纳

在PHP中查找数组元素的所有可能的唯一组合[重复]

This question already has an answer here:

I’m aware of several questions covering this topic (e.g. here), but none of them (at least from what I found) do what I need.

Say I have an array of 3 elements [1, 2, 3]. I need to find all the possible unique combinations (so excluding permutations, like here), including the ones of repeating elements. So the result should be:

[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]

Excluding subsets like [3, 2, 1] or [2, 1, 3], that are the same thing as [1, 2, 3].

How can I achieve this?

</div>
  • 写回答

1条回答 默认 最新

  • dongshengli6384 2013-03-25 21:41
    关注

    Fast solution using recursion, probably not the best way to do it, but it gets the job done.

    <?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>';
    }
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看