我有以下数据作为一个联合阵列

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"));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top