我有一个这样的数组:
$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'
)
)
)
);
现在,我想对阵列进行排序,即最近的餐厅位于顶部。我试过这个:
$myarray = array_msort($myarray['Restaurant'], array('distance'=>SORT_ASC));
这不起作用。有什么帮助吗?
不幸的是,我不应该更改数组,因为为了进一步处理它需要在这个结构中。
感谢您提供任何提示和技巧。
答案 0 :(得分:1)
您可以使用闭包:
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;
});
答案 1 :(得分: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()
不稳定:如果两家餐馆的距离相同,则他们在排序数组中的顺序是未定义的。