PHP usort() 函数要求参数 2 必须是一个有效的回调函数,而不是在类中。

9

我遇到了一个usort函数的问题,它似乎不喜欢第二个参数(排序函数)。我看到很多关于这个问题的提问都涉及到在类中使用时的问题,解决方法是传递一个array($this, functionName)数组。

但是在我的情况下,这种方法并没有起作用。我的脚本不是一个类,但我却收到了以下错误:

PHP Warning:  usort() expects parameter 2 to be a valid callback, function 'cmp' not found or invalid function name in <filename.php>

那么第二个参数,即函数名找不到的问题是什么呢?这是直接从PHP官网上摘抄的示例代码。

3个回答

10
如果代码不在类中,但您正在使用命名空间,则usort期望第二个参数具有该命名空间的定义。但不是以类似于在类中使用usort的数组格式。
以下是我使用的代码,其中“cmp”是排序函数:
usort($arrayToSort, 'My\Full\Namespace\cmp');

2
这是发布问答格式的方式。如果您遇到问题并想出了解决方案,可以以问答格式发布。 - Deltaxfx

4

如果这能帮到你(并且这是谷歌搜索结果的顶部),我曾经也需要这样做。

class MyObj{
        var $Supplier;
        function cmp($m, $n) {
            if ($m->Supplier == $n->Supplier) {
                return 0;
            }
            return ($m->Supplier < $n->Supplier) ? -1 : 1;
         }
 }
      
 usort($arrayToSort, array('My\Full\Namespace\MyObj', 'cmp'));

虽然我的排序函数是私有的,但对我来说有效。 - Paulo Costa
这对我也起作用了 - 我的函数是私有的,所以我只需要传递我的类命名空间。这是为一个Dokuwiki插件,我想这就是为什么我必须这样做的原因。 - CXL

3

我把回调函数放在了包含 usort() 的函数内,这样就可以起作用了。

function callerFn() {

    if (!function_exists('callbackFn'))   {
        function callbackFn() {}
    }

    usort($arrayToSort, "callbackFn");

}

您也可以将其作为未命名函数执行:

function callerFn() {

    usort($arrayToSort, function() {} );

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接