我试图搜索并找到了这个:
Sort an array by a child array's value in PHP
但是这个功能在我的情况下不起作用:
$sorted = array();
foreach($players as $player)
{
$p = Model::factory('user');
$p->load($player['id']);
$sorted[] = array('id' => $player['id'], 'username' => $p->get_username());
}
如何在用户名后按字母顺序对数组进行排序?
功能,
function cmp($a, $b) {
if ($a['username'] == $b['username']) {
return 0;
}
return ($a['username'] < $b['username']) ? -1 : 1;
}
然后调用usort($ sorted,“cmp”);不会为我工作(得到错误未定义索引[2])..
有没有办法选择是按顺序降序还是升序?
答案 0 :(得分:0)
因为数组中不存在索引2。你应该使用$ a ['username']或$ a ['id'],但我想你想要对用户名进行排序,那么你就可以使用$ a ['username']。
答案 1 :(得分:0)
'cmp'功能将是:
// $param - the parameter by which you want to search
function cmp(&$a, &$b, $param) {
switch( $param ) {
case 'id':
if ( $a['id'] == $b['id'] ) {
return 0;
}
return ( $a['id'] < $b['id'] ) ? -1 : 1;
break;
case 'username':
// string comparison
return strcmp($a['username'], $b['username']);
break;
}
}
// this is the sorting function by using an anonymous function
// it is needed to pass the sorting criterion (sort by id / username )
usort( $sorted, function( $a,$b ) {
return cmp( $a, $b, 'username');
});