【问题标题】:PHP usort() expects parameter 2 to be a valid callback, not in a classPHP usort() 期望参数 2 是一个有效的回调,而不是在一个类中
【发布时间】:2016-11-08 18:27:21
【问题描述】:

我有一个问题是 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 网站的示例代码。

【问题讨论】:

    标签: php warnings usort


    【解决方案1】:

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

    这对我有用,其中 'cmp' 是排序函数:

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

    【讨论】:

    • 发帖的问答形式。如果您有问题并想出解决方案,可以以问答形式发布。
    【解决方案2】:

    我将回调函数放在我放置 usort() 的函数中,它起作用了。

    function callerFn() {
    
        if (!function_exists('callbackFn'))   {
            function callbackFn() {}
        }
    
        usort($arrayToSort, "callbackFn");
    
    }
    

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

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

    【讨论】:

      【解决方案3】:

      如果这有帮助,(&因为这是谷歌的顶级),我必须这样做

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

      【讨论】:

      • 为我工作,即使我的排序功能是私有的。
      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 2014-11-22
      • 2013-08-01
      • 2012-10-04
      • 1970-01-01
      • 2020-11-08
      • 2016-06-06
      • 1970-01-01
      相关资源
      最近更新 更多