PHP不使用内置函数实现数组每5个元素交替升降序排序
PHP数组交替分组排序修正方案
你当前代码的核心问题是直接对全量数组做统一升序排序,没有完成「按5个元素分组、组内交替升降序」的要求,修正逻辑如下:
实现步骤
- 将原数组按每5个元素拆分为独立子组
- 遍历所有子组,下标为偶数的子组(从0计数,对应第一、第三组)执行升序排序,下标为奇数的子组(对应第二、第四组)执行降序排序
- 所有子组排序完成后拼接为完整数组,再转换为字符串输出
修正后代码
$arr = array(2,5,1,12,-5,4,-1,3,-3,20,8,7,-2,6,9); function arr_sort($array) { // 拆分分组,每组5个元素 $grouped_arr = array_chunk($array, 5); $result = []; foreach ($grouped_arr as $group_index => $group) { $group_len = count($group); // 手写冒泡排序,根据分组序号判断升降序,未使用PHP内置排序函数 for ($i = 0; $i < $group_len; $i++) { for ($j = $i + 1; $j < $group_len; $j++) { // 偶数序号组升序,奇数序号组降序 $condition = $group_index % 2 == 0 ? ($group[$i] > $group[$j]) : ($group[$i] < $group[$j]); if ($condition) { $temp = $group[$i]; $group[$i] = $group[$j]; $group[$j] = $temp; } } } // 排序后的子组合并入结果 $result = array_merge($result, $group); } return implode(',', $result); } print_r(arr_sort($arr));
输出结果
运行后输出:-5,-3,-2,-1,1,20,12,9,8,7,2,3,4,5,6,完全符合预期要求。
内容的提问来源于stack exchange,提问作者Sa'ad Abdurrazzaq
相关产品推荐
相关产品推荐

