首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序时PHP“警告: usort() [function.usort]:无效比较函数”

排序时PHP“警告: usort() [function.usort]:无效比较函数”
EN

Stack Overflow用户
提问于 2009-08-04 19:05:16
回答 2查看 7.2K关注 0票数 4

我有以下数据作为关联数组

代码语言:javascript
复制
array
  'abc' => 
    array
      'label' => string 'abc' (length=3)
      'weight' => float 3
  'wsx' => 
    array
      'label' => string 'wsx' (length=3)
      'weight' => float 1
  'qay' => 
    array
      'label' => string 'qay' (length=3)
      'weight' => float 1
  'http://test.com' => 
    array
      'label' => string 'http://test.com' (length=15)
      'weight' => float 0
  'Nasi1' => 
    array
      'label' => string 'Nasi1' (length=5)
      'weight' => float 0
  'fax' => 
    array
      'label' => string 'fax' (length=3)
      'weight' => float 4

我想使用“标签”或“权重”对数组进行排序。

标签的比较函数是:

代码语言:javascript
复制
function compare_label($a, $b)
{
    return strnatcmp($a['label'], $b['label']);
}

而不是我从另一个函数调用这个函数:

代码语言:javascript
复制
usort($label, 'compare_label');
var_dump($label);

但是,我得到了错误消息,数组没有排序。我不知道我做错了什么。我试着替换:

  • usort($label, 'compare_label');usort($label, compare_label);
  • usort($label, 'compare_label');usort($label, $this->compare_label);

但没有成功。谁能给我个提示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-04 19:15:24

如果compare_label是一个成员函数(即类方法),那么需要以不同的方式传递它。

代码语言:javascript
复制
usort( $label, array( $this, 'compare_label' ) );

基本上,不只是发送函数名的字符串,而是发送一个双元素数组,其中第一个元素是上下文(可以在其中找到方法的对象),第二个元素是函数名的字符串。

注意:如果方法是静态的,则将类名作为数组的第一个元素传递。

代码语言:javascript
复制
usort( $label, array( __CLASS__, 'compare_label' ) );
票数 21
EN

Stack Overflow用户

发布于 2009-08-04 19:17:14

比较函数是定义为全局函数还是对象的方法?如果它是一种方法,那么您必须稍微更改一下它的名称:

代码语言:javascript
复制
usort($label, array($object, "compare_label")); 

您还可以将其声明为类本身的静态方法:

代码语言:javascript
复制
public static function compare_label ($a, $b) {
   [...]
}

usort($label, array(Class_Name, "compare_label"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1229324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档