在给定结构中的php中对多维数组进行排序

时间:2014-05-22 20:42:53

标签: php sorting multidimensional-array

我有一个这样的数组:

$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));

这不起作用。有什么帮助吗?

不幸的是,我不应该更改数组,因为为了进一步处理它需要在这个结构中。

感谢您提供任何提示和技巧。

2 个答案:

答案 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()不稳定:如果两家餐馆的距离相同,则他们在排序数组中的顺序是未定义的。