如何用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]; } } ?>
实现逻辑说明
- 排序阶段:用双重循环实现选择排序,每轮外层循环将未排序区间的最小值交换到当前起始位置,遍历完成后得到完整的升序数组
- 去重打印阶段:因为数组已经有序,重复值会连续排列,只需要对比当前元素和上一次打印的元素,值不同时就打印并更新上一次打印的值,自然过滤所有重复值,不会出现漏判或者误判
运行输出
0, 1, 2, 3, 4, 5, 7, 8, 9, 12
内容的提问来源于stack exchange,提问作者Mike Adeyeye
相关产品推荐
相关产品推荐

