首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中对关联数组排序

在PHP中对关联数组排序
EN

Stack Overflow用户
提问于 2009-04-22 14:48:26
回答 5查看 78.4K关注 0票数 61

我有一个格式如下的数组:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [text] => tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 7480000
            [lastMonthSearchVolume] => 9140000
        )

    [1] => Array
        (
            [text] => personality tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 165000
            [lastMonthSearchVolume] => 201000
        )

    [2] => Array
        (
            [text] => online tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 246000
            [lastMonthSearchVolume] => 301000
        )

)

如何按avgSearchVolume字段降序对格式中的数组进行排序?有没有内置的函数呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-22 14:55:08

使用usort并提供您自己的函数来进行排序,例如

代码语言:javascript
复制
function cmp($a, $b)
{
    return $b['avgSearchVolume'] - $a['avgSearchVolume'];
}

usort($array, "cmp");
票数 110
EN

Stack Overflow用户

发布于 2009-04-22 19:13:11

在PHP5.3之前,这是基于子键进行排序的最佳函数,而无需为每个键创建新函数。

代码语言:javascript
复制
function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
    foreach ($array as $subarray) {
        $keys[] = $subarray[$subkey];
    }
    array_multisort($keys, $sortType, $array);
}
sortBySubkey($arr, 'avgSearchVolume');

在PHP5.3中,你可以这样做,和现在一样调用函数。

代码语言:javascript
复制
function getSortVariable($sortType = SORT_ASC) {
    switch($sortType) {
        case SORT_ASC:
            return function ($a, $b) use ($subkey) { return strcmp($a[$subkey], $b[$subkey]); };
    }
}

function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
    $sortFunction = getSortVariable($sortType);
    usort($array, $sortFunction($subkey));
}
票数 18
EN

Stack Overflow用户

发布于 2009-04-22 14:54:23

您必须将自定义回调函数与usort()一起使用。

代码语言:javascript
复制
function cmp($a, $b)
{
    if ($a['avgSearchVolume'] == $b['avgSearchVolume']) {
        return 0;
    }
    return ($a['avgSearchVolume'] > $b['avgSearchVolume']) ? -1 : 1;
}
usort($array, 'cmp');
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/777597

复制
相关文章

相似问题

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