0

我试图组织这种数组

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;
    });
4

1 回答 1

3

您必须在函数中传递$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;
}
于 2012-08-24T23:04:18.383 回答