You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中生成数组的所有唯一有序组合

PHP 生成数组的所有非重复无序组合(长度≥2)

给定数组:

$array = ['A', 'B', 'C', 'D'];

需要生成所有长度从2到原数组长度的唯一组合,要求排除逆序重复项(如只保留['A','B'],排除['B','A']),且子数组元素保持有序。4元素数组的组合总数为C(4,2)+C(4,3)+C(4,4)=6+4+1=11,与需求一致。

实现代码

function getUniqueCombinations($array) {
    $combinations = [];
    $arrayLength = count($array);

    // 遍历生成2到数组长度的所有组合
    for ($combinationSize = 2; $combinationSize <= $arrayLength; $combinationSize++) {
        $combinations = array_merge($combinations, generateFixedSizeCombinations($array, $combinationSize));
    }

    return $combinations;
}

function generateFixedSizeCombinations($array, $targetSize, $startIndex = 0, $currentCombination = []) {
    $result = [];
    $currentLength = count($currentCombination);

    // 当前组合长度达标,返回该组合
    if ($currentLength === $targetSize) {
        return [$currentCombination];
    }

    // 从startIndex开始遍历,避免生成重复的逆序组合
    for ($i = $startIndex; $i < count($array); $i++) {
        $currentCombination[] = $array[$i];
        // 递归生成后续元素,起始索引+1确保只选当前元素之后的项
        $result = array_merge($result, generateFixedSizeCombinations($array, $targetSize, $i + 1, $currentCombination));
        array_pop($currentCombination);
    }

    return $result;
}

// 测试示例
$array = ['A', 'B', 'C', 'D'];
$new_array = getUniqueCombinations($array);

// 输出结果
print_r($new_array);

代码说明

  • getUniqueCombinations:外层函数,遍历需要生成的组合长度(从2到原数组长度),合并各长度的组合结果。
  • generateFixedSizeCombinations:递归生成指定长度的组合,通过startIndex控制元素选取的起始位置,确保每个组合的元素都是按原数组顺序选取,自然避免逆序重复。每次递归时,下一个元素的起始索引为当前索引+1,保证不会回头选取之前的元素,从而生成唯一的无序组合。

运行上述代码后,输出的$new_array与需求中的结果完全一致。

内容的提问来源于stack exchange,提问作者Tidjy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:12:58