我有一个这样的数组:
$myarray = array (
array(
array('Restaurant' =>
array(
'name' => 'Rodeo Ranch',
'distance' => 1.2
),
),
array('Menu' =>
array(
'title' => 'Steak with fries'
)
)
),
array(
array('Restaurant' =>
array(
'name' => 'City Bar',
'distance' => 0.9
),
),
array('Menu' =>
array(
'title' => 'Burger with Chicken'
),
array(
'title' => 'Hot-Dog'
)
)
)
);
现在,我想对数组进行排序,最近的Restaurant在最上面。我试过了:
$myarray = array_msort($myarray['Restaurant'], array('distance'=>SORT_ASC));
这不起作用。任何帮助吗?
不幸的是,我不应该改变数组,因为为了进一步处理它,它需要在这个结构中。
谢谢你的提示和技巧。
可以使用闭包:
usort($myarray,function($a,$b) {
if( $a['Restaraunt']['distance'] < $b['Restaraunt']['distance'] ) return -1;
if( $a['Restaraunt']['distance'] > $b['Restaraunt']['distance'] ) return 1;
return 0;
});
usort()
是您在尝试对具有更复杂结构的数组进行排序时的朋友:
usort($myarray, function(array $a, array $b) {
$aDistance = $a[0]['Restaurant']['distance'];
$bDistance = $b[0]['Restaurant']['distance'];
if($aDistance == $bDistance) {
return 0;
}
return $aDistance > $bDistance ? 1 : -1;
});
注意usort()
是不稳定的:如果两个餐厅有相同的距离,它们在排序数组中的顺序是未定义的。