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

如何不使用sort或asort函数将数组升序后存入另一个数组?

如何将数组升序排序后写入另一个数组

最简单的解决方案:使用PHP内置排序函数

PHP内置了高效的排序函数,完全可以满足需求,不需要自己写复杂的循环逻辑:

$data = [3, 4, 54, 7, 9, 34, 5, 6, 7, 3, 5];
// 复制原数组到新数组,避免修改原数组内容
$res1 = $data;
// 对新数组执行升序排序(sort函数会直接修改目标数组)
sort($res1);

// 输出排序后的结果
foreach ($res1 as $num) {
    echo $num . ' / ';
}

执行后输出:3 / 3 / 4 / 5 / 5 / 6 / 7 / 7 / 9 / 34 / 54 /


你的代码存在的问题

你自己写的嵌套循环有几个明显错误:

  1. 修改原数组导致循环混乱:循环中使用array_shift($data)直接修改原数组,count($data)的值会不断减小,外层循环的$i和数组实际长度不匹配,最终导致元素被跳过或重复处理。
  2. 判断逻辑不完整:代码只把比$data[$i]小的元素加入新数组,既没处理等于当前元素的情况,也没将$data[$i]本身加入新数组,最终会丢失大量元素。
  3. 索引偏移问题:原数组被array_shift修改后索引重排,后续循环中$data[$i]指向的元素已不是初始值,逻辑完全混乱。

自定义排序实现(如果不想用内置函数)

如果想手动实现排序逻辑,比如冒泡排序,可以这样写:

$data = [3, 4, 54, 7, 9, 34, 5, 6, 7, 3, 5];
$res1 = $data;
$length = count($res1);

// 冒泡排序:通过相邻元素比较交换,逐步将最大元素移到末尾
for ($i = 0; $i < $length - 1; $i++) {
    for ($j = 0; $j < $length - $i - 1; $j++) {
        if ($res1[$j] > $res1[$j + 1]) {
            // 交换两个元素的位置
            $temp = $res1[$j];
            $res1[$j] = $res1[$j + 1];
            $res1[$j + 1] = $temp;
        }
    }
}

// 输出结果
foreach ($res1 as $num) {
    echo $num . ' / ';
}

内容的提问来源于stack exchange,提问作者Tsimbina Thrimoson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:01:01