PHP usort()期望参数2是有效的回调,而不是在类中

时间:2016-07-06 15:59:38

标签: php warnings 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 个答案:

答案 0 :(得分:6)

如果代码不在类中,但您正在使用命名空间,则usort期望第二个参数定义该命名空间。但不是类似于在类中使用usort的数组。

这对我有用,'cmp'是排序功能:

usort($arrayToSort, 'My\Full\Namespace\cmp');

答案 1 :(得分:0)

我将回调函数放到了将usort()放到里面的函数中。

function callerFn() {

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

    usort($arrayToSort, "callbackFn");

}

您也可以将其作为未命名函数使用

function callerFn() {

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

}

答案 2 :(得分:0)

如果这有帮助,(因为这是Google的榜首),我必须这样做

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'));