dougong7850 2014-01-13 14:50
浏览 52
已采纳

没有使用PHP正确排序的多维数组

I can't get this. Why doesn' this work?

    $list = array(array('id' => 123), array('id' => 10), array('id' => 1000));
    $this->OrderListById($list);
    return $list;

    public function OrderListById($list){
        usort($list, function($a, $b) {return $a['id'] - $b['id'];});
    }

This returns

array(
    (int) 0 => array(
        'id' => (int) 123
    ),
    (int) 1 => array(
        'id' => (int) 10
    ),
    (int) 2 => array(
        'id' => (int) 1000
    )
)

And i was hoping something like more ordered :D

array(
    (int) 0 => array(
        'id' => (int) 10
    ),
    (int) 1 => array(
        'id' => (int) 123
    ),
    (int) 2 => array(
        'id' => (int) 1000
    )
)
  • 写回答

3条回答 默认 最新

  • dongyin4202 2014-01-13 14:53
    关注

    The $list parameter in the OrderListById must be a reference:

    public function OrderListById(array &$list)
    {
        usort($list, function($a, $b) {
            return $a['id'] - $b['id'];
        });
    }
    

    Should work.

    As a precaution you could typecast values as you compare them, just in case they are not integers, however, that's something you should check before you sort the array:

    return (int) $a['id'] - (int) $b['id'];
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?