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

PHP半数值数组选择排序无效,请求排查与修复方案

问题分析与修复方案

首先,你的代码里有两个关键问题导致数组排序后没有变化,咱们一步步拆解解决:

1. 变量名拼写错误

你调用排序函数时写了:

recursiveSelectionSort($myarray, sizeof($mayarry));

这里的$mayarry是拼写错误,应该是$myarray——这个小错误会让函数拿到错误的数组长度,排序逻辑根本没法正常执行。

2. PHP数组的传递方式问题

PHP里默认参数是值传递,也就是说你的recursiveSelectionSort函数里操作的是原数组的一个副本,不管你在函数里怎么交换元素,原数组都不会受到任何影响。要让函数能直接修改原数组,必须把数组参数改成引用传递。

修改后的完整代码

我们需要给minIndex和recursiveSelectionSort函数的数组参数加上&符号,改成引用传递:

function getScoreValue($row) {
    return (int)(explode(",", $row)[2]);
}

// 数组参数改为引用传递
function minIndex(&$ma, $mi, $mj) {
    if ($mi == $mj) {
        return $mi;
    }
    $k = minIndex($ma, $mi + 1, $mj);
    if (getScoreValue($ma[$mi]) < getScoreValue($ma[$k])) {
        return $mi;
    } else {
        return $k;
    }
}

// 数组参数改为引用传递
function recursiveSelectionSort(&$ma, $mn, $mindex = 0) {
    if ($mindex == $mn) {
        return;
    }
    $k = minIndex($ma, $mindex, $mn - 1);
    if ($k != $mindex) {
        $temp = $ma[$k];
        $ma[$k] = $ma[$mindex];
        $ma[$mindex] = $temp;
    }
    recursiveSelectionSort($ma, $mn, $mindex + 1);
}

然后正确调用函数:

recursiveSelectionSort($myarray, sizeof($myarray));

这样修改后,递归排序就能正确修改原数组,按照score列完成排序了。

额外建议:用PHP内置函数简化实现

其实PHP已经提供了更简洁的内置排序函数usort,完全可以替代自己写的递归排序,代码更简洁还不容易出错:

usort($myarray, function($a, $b) {
    $scoreA = (int)explode(",", $a)[2];
    $scoreB = (int)explode(",", $b)[2];
    return $scoreA - $scoreB; // 升序排序,要降序就改成$scoreB - $scoreA
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:24:27