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


Why usort doesn't work inside of function?

代码如下- 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);

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

。E,你是在对副本排序,而不是对原始数组排序。

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

function fs(&$array){
}

您通过值传递数组给函数,而不是引用,因此您的usort()调用不是对源数组排序,而是对其副本排序。通过引用传递数组(参见文档):

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

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

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

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