我无法得到这个。为什么这不起作用?
$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'];});
}
返回
array(
(int) 0 => array(
'id' => (int) 123
),
(int) 1 => array(
'id' => (int) 10
),
(int) 2 => array(
'id' => (int) 1000
)
)
我希望更有序的东西:D
array(
(int) 0 => array(
'id' => (int) 10
),
(int) 1 => array(
'id' => (int) 123
),
(int) 2 => array(
'id' => (int) 1000
)
)
答案 0 :(得分:4)
$list
中的OrderListById
参数必须是参考:
public function OrderListById(array &$list)
{
usort($list, function($a, $b) {
return $a['id'] - $b['id'];
});
}
应该工作。
作为预防措施,您可以在比较它们时对类型进行类型转换,以防它们不是整数,但是,在对数组进行排序之前应该检查一下:
return (int) $a['id'] - (int) $b['id'];
答案 1 :(得分:3)
return $a['id'] - $b['id'];
1000-123超过123-10。
这应该更像是一个例子,你进行比较而不是减法。
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
在一行中:
usort($list, function($a, $b) {return ($a['id'] == $b['id'] ? 0 : (($a['id'] < $b['id']) ? -1 : 1)); });
(未经测试,可能是一个错字,但这是它的主旨)
答案 2 :(得分:-1)
通过参考:
public function OrderListById(&$list){
usort($list, function($a, $b) {return $a['id'] - $b['id'];});
}
或返回已排序的列表
public function OrderListById($list){
usort($list, function($a, $b) {return $a['id'] - $b['id'];});
return $list;
}