使用usort忽略

时间:2012-08-24 23:00:44

标签: php usort

我试图组织这种数组

array
  0 => 
    array
      'id' => '19'
      'nome' => 'Lorem ipsum'
      'order' => '0'
  1 => 
    array
      'id' => '23'
      'nome' => 'Lorem ipsum'
      'order' => '2'
  2 => 
    array
      'id' => '45'
      'nome' => 'Lorem ipsum'
      'order' => '0'
  3 => 
    array
      'id' => '6'
      'nome' => 'Lorem ipsum'
      'order' => '0'
  4 => 
    array
      'id' => '23'
      'nome' => 'Lorem ipsum'
      'order' => '1'
  5 => 
    array
      'id' => '12'
      'nome' => 'Lorem ipsum'
      'order' => '0'

所以,我必须将零值放在数组的末尾,并使用其他顺序值来更正数组。

array
  0 => 
    array
      'id' => '23'
      'nome' => 'Lorem ipsum'
      'order' => '1'
  1 => 
    array
      'id' => '23'
      'nome' => 'Lorem ipsum'
      'order' => '2'
  2 => 
    array
      'id' => '19'
      'nome' => 'Lorem ipsum'
      'order' => '0'
  3 => 
    array
      'id' => '45'
      'nome' => 'Lorem ipsum'
      'order' => '0'
  4 => 
    array
      'id' => '6'
      'nome' => 'Lorem ipsum'
      'order' => '0'
  5 => 
    array
      'id' => '12'
      'nome' => 'Lorem ipsum'
      'order' => '0'

我尝试使用这样的usort,结果不正确:

    usort($items, function() {
        if ($a['uf_order'] == 0) return 0;
        return ($a['uf_order'] > $b['uf_order']) ? -1 : 1;
    });

1 个答案:

答案 0 :(得分:2)

您必须在函数中传递$a$b

usort($items, function($a, $b) {
    if ($a['uf_order'] == 0) return 0;
    return ($a['uf_order'] > $b['uf_order']) ? -1 : 1;
});

此外,您的数组中没有名为uf_order的密钥。

正如NomikOS在他的评论中正确陈述的那样。这只适用于PHP 5.3+。如果你有一个旧版本的PHP,你可以这样做:

usort($items, 'cmp');

function cmp ($a, $b) {
    if ($a['uf_order'] == 0) return 0;
    return ($a['uf_order'] > $b['uf_order']) ? -1 : 1;
}