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

如何用PHP仅通过循环与if else实现数组遍历排序并输出非重复值

仅用循环和if/else实现PHP数组排序后打印非重复值

现有代码问题分析

  • 排序逻辑和去重判断耦合在同一个内层循环中,排序未完成时元素位置还未固定,此时判断重复会出现误判
  • 内层循环的else分支中$input_array[$i] != $input_array[$j];是无实际作用的表达式,属于冗余代码
  • 重复判定的触发逻辑有缺陷,排序过程中提前break跳出内层循环会导致排序不完全

修正后实现代码

<?php
$input_array = [3, 5, 7, 7, 8, 3, 1, 9, 9, 9, 0, 2, 4, 8, 0, 12, 5, 8, 2];
$count_array = count($input_array);

// 第一步:单独实现升序排序(仅用循环和if/else)
for ($i = 0; $i < $count_array; $i++) {
    for ($j = $i + 1; $j < $count_array; $j++) {
        if ($input_array[$i] > $input_array[$j]) {
            // 交换两个元素位置
            $temp = $input_array[$i];
            $input_array[$i] = $input_array[$j];
            $input_array[$j] = $temp;
        }
    }
}

// 第二步:遍历排序后的数组,打印非重复值
$last_value = null;
for ($k = 0; $k < $count_array; $k++) {
    // 和上一个输出的值对比,不一致就输出
    if ($input_array[$k] !== $last_value) {
        // 第一个值不用输出前面的逗号
        if ($last_value !== null) {
            echo ', ';
        }
        echo $input_array[$k];
        $last_value = $input_array[$k];
    }
}
?>

实现逻辑说明

  1. 排序阶段:用双重循环实现选择排序,每轮外层循环将未排序区间的最小值交换到当前起始位置,遍历完成后得到完整的升序数组
  2. 去重打印阶段:因为数组已经有序,重复值会连续排列,只需要对比当前元素和上一次打印的元素,值不同时就打印并更新上一次打印的值,自然过滤所有重复值,不会出现漏判或者误判

运行输出

0, 1, 2, 3, 4, 5, 7, 8, 9, 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:08