首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用usort对数组进行排序

使用usort对数组进行排序
EN

Stack Overflow用户
提问于 2011-12-29 02:00:31
回答 2查看 143关注 0票数 1

我有一个包含北、东、南或西的数组。

例如,我得到了一个数组,值的顺序是:南、西和北。

现在,我想对数组进行排序,如北、东、南和西。

因此,在我的示例中,值应按以下顺序排列:北、南、西。

我该怎么做呢?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-29 02:08:11

您也可以使用array_intersect()。它保留了第一个数组的顺序。将所有基本方向按正确顺序排列的数组作为第一个参数,并将要排序的数组作为第二个参数。

代码语言:javascript
复制
$cardinals = array( 'north', 'east', 'south', 'west' );
$input = array( 'south', 'west', 'north' );

print_r( array_intersect( $cardinals, $input ) );
票数 6
EN

Stack Overflow用户

发布于 2011-12-29 02:15:27

你可以这样做(我相信这也是Samuel Lopez在评论中提出的建议):

代码语言:javascript
复制
$arr = array ('north', 'west', 'south', 'east', );

function compass_sort ($a, $b)
{
        $cmptable = array_flip (array (
                'north',
                /* you might want to add 'northeast' here*/
                'east',
                /* and 'southeast' here */
                'south',
                'west',
        ));

        $v1 = trim (mb_strtolower ($a));
        $v2 = trim (mb_strtolower ($b));

        if ( ! isset ($cmptable[$v1])
           || ! isset ($cmptable[$v2]))
        {
                /* error, no such direction */
        }

        return $cmptable[$v1] > $cmptable[$v2];
}

usort ($arr, 'compass_sort');

这将为每个方向分配一个数字,并根据该数字进行排序,north将被分配为0,east将被分配为1(除非您在两者之间添加了一些内容),依此类推。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8659495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档