我有以下数据作为关联数组
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
我想使用“label”或“weight”
对数组进行排序标签的比较功能是:
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);
没有成功。有人可以给我一个暗示吗?
答案 0 :(得分:21)
如果compare_label
是成员函数(即类方法),则需要以不同方式传递它。
usort( $label, array( $this, 'compare_label' ) );
基本上,不是只发送函数名的字符串,而是发送一个双元素数组,其中第一个元素是上下文(可以在其上找到方法的对象),第二个元素是字符串功能名称。
注意:如果您的方法是静态的,那么您将类名作为数组的第一个元素传递
usort( $label, array( __CLASS__, 'compare_label' ) );
答案 1 :(得分:1)
比较函数是定义为全局函数还是对象的方法?如果这是一种方法,你将不得不改变你稍微调用它的方式:
usort($label, array($object, "compare_label"));
您也可以将其声明为类本身的静态方法:
public static function compare_label ($a, $b) {
[...]
}
usort($label, array(Class_Name, "compare_label"));