PHP"警告:usort()[功能。usort]:无效的比较"功能上的排序
-
22-07-2019 - |
题
我有以下数据作为一个联合阵列
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
我想让排序列使用的"标签",或"权重"
比较功能的标签:
function compare_label($a, $b)
{
return strnatcmp($a['label'], $b['label']);
}
比我刚刚叫的函数的另一个功能:
usort($label, 'compare_label');
var_dump($label);
但后来我得到错误的消息和阵不排序。我不知道我在做什么错误的。我已试图更换:
usort($label, 'compare_label');
与usort($label, compare_label);
usort($label, 'compare_label');
与usort($label, $this->compare_label);
没有成功。有人能给我个提示?
解决方案
如果 compare_label
是一件功能(即,流的方法)然后你需要通过不同的看法。
usort( $label, array( $this, 'compare_label' ) );
基本上,而不只是发送了一串名字功能,你送两件阵列,那里的第一个元素是上下文(对象的方法可以找到),并将2个要素是串的职能名称。
注: 如果你的方法是静态的,然后你通过类的名字作为第一个元素
usort( $label, array( __CLASS__, 'compare_label' ) );
其他提示
是比较功能定义为一个全球性的功能或者为对象的方法?如果这是一种方法,你会改变你怎么称呼它略:
usort($label, array($object, "compare_label"));
你也可以声明它作为一个静态的方法的类本身:
public static function compare_label ($a, $b) {
[...]
}
usort($label, array(Class_Name, "compare_label"));
不隶属于 StackOverflow