Php 使用键对数组进行排序

Php 使用键对数组进行排序,php,arrays,Php,Arrays,我有一个数组,它承载我的框架的所有路由。看起来像这样 $routes=[ '/[:name]/[:name]/[:name]' =>['ALL','dynamic','blog'] '/news' =>['ALL','static','news'], '/about' =>['ALL','static'], ]; 我想根据 斜杠数/ 动态参数的数量 在钥匙里。我

我有一个数组,它承载我的框架的所有路由。看起来像这样

$routes=[
    '/[:name]/[:name]/[:name]'   =>['ALL','dynamic','blog']

    '/news'                      =>['ALL','static','news'],

    '/about'                     =>['ALL','static'],

];
我想根据

斜杠数/ 动态参数的数量
在钥匙里。我将如何完成它?

这里有两件事很重要。您需要保留键到值的关系。这意味着您使用数组排序函数,如uasort,而不是usort。接下来,您必须使用一个用户定义的排序函数,它表示您的排序算法。它描述了您希望如何对路线进行排序

也可以按键排序:那么array_flip就是您的朋友

您可以使用此选项启动:

<?php

$routes=[
    '/about'                     =>['ALL','static'],
    '/[:name]/[:name]/[:name]'   =>['ALL','dynamic','blog'],
    '/news'                      =>['ALL','static','news'],
];

function sortShortestRoute($a, $b)
{
    return (count($a) < count($b)) ? -1 : 1;
}

function sortStaticBeforeDynamic($a, $b)
{
    if($a[1] === 'static' && $b[1] === 'static') {
        return 1;
    }

    if($a[1] === 'dynamic' && $b[1] === 'dynamic') {
        return -1;
    }

    if ($a[1] === $b[1]) {
        return 0;
    }
}

// first sort
uasort($routes, 'sortStaticBeforeDynamic');

var_dump($routes);

// second sort
uasort($routes, 'sortShortestRoute');

var_dump($routes);

你看过关于如何排序多维数组的PHP文档了吗?你试过什么吗?我试过uksort和asort,但没有work@WEBDEVPR给我们看看。@WEBDEVPR。。就像你试图解决问题一样。