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



我有一个这样的数组:

$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()是不稳定的:如果两个餐厅有相同的距离,它们在排序数组中的顺序是未定义的。

相关内容

  • 没有找到相关文章

最新更新