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
相关产品推荐
相关产品推荐

