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

PHP中不使用内置函数获取数组全排列的实现方法

解决数组全排列(无内置函数)的问题

你的代码得到256种结果是因为没限制索引重复——每个循环都遍历所有4个索引,4×4×4×4=256,这是允许元素重复的排列,而全排列要求每个元素只能出现一次,所以得在每层循环里跳过已经用过的索引。

修改后的代码如下,会生成24种正确的全排列并存入数组:

$numbers = [1,2,3,4];
$permutations = [];

for($i = 0; $i <= 3; $i++){
    for($j = 0; $j <= 3; $j++){
        // 跳过和i重复的索引
        if($j == $i) continue;
        for($k = 0; $k <= 3; $k++){
            // 跳过和i、j重复的索引
            if($k == $i || $k == $j) continue;
            for($l = 0; $l <= 3; $l++){
                // 跳过和i、j、k重复的索引
                if($l == $i || $l == $j || $l == $k) continue;
                // 生成当前排列并存入数组
                $current = [$numbers[$i], $numbers[$j], $numbers[$k], $numbers[$l]];
                $permutations[] = $current;
                // 按需求输出排列字符串
                echo implode('', $current) . "<br>";
            }
        }
    }
}

// 验证全排列总数
echo "全排列总数: " . count($permutations) . "\n";

代码说明

  • 每层循环通过continue跳过已被上层使用过的索引,确保每个元素仅被选中一次
  • 生成的每个排列以数组形式存入$permutations,方便后续和随机数对比
  • 最终count($permutations)会返回24,符合4个元素的全排列数量(4! = 24)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:55:17