为什么usort不能在函数内部工作?

时间:2014-08-08 07:15:21

标签: php usort

以下是代码 - http://sandbox.onlinephpfunctions.com/code/ac3b31af0ce4d348f91957b314a8fa089cc8e779 仅当取消注释95字符串时,它才有效。

我花了半天时间从这里制作代码 - https://stackoverflow.com/a/25192827/2653694 - 开始工作。但由于某些原因,usort在函数内部不起作用。为什么呢?..

代码的相关部分:

function fs($array){

    usort($array, 'sortByOrder');

};

function sortByOrder($a, $b) {
    return $a['order_inside_level'] - $b['order_inside_level'];
};

fs($array);
// usort($array, 'sortByOrder'); // If to uncomment this string then array is ordered by 'order_inside_level'

var_dump($array);

3 个答案:

答案 0 :(得分:5)

如果将数组传递给函数,则会创建并传递数组的副本。当数组分配给另一个变量时,会发生同样的情况。

即,您正在对副本进行排序,而不是原始数组。

您可以定义数组应该通过引用传递:

function fs(&$array){

}

答案 1 :(得分:3)

您正在通过值传递数组,而不是引用,因此您的usort()调用不会对源数组进行排序,而是对其副本进行排序。通过引用(see docs)传递数组:

function fs(&$array) {
   usort($array, 'sortByOrder');
}

或使用global $array;并将其作为函数参数(坏主意)放弃传递

答案 2 :(得分:2)

我认为你必须通过引用传递数组:

function fs(&$array){
    usort($array, 'sortByOrder');
};