如何排序关联数组?

时间:2015-11-01 16:52:00

标签: php arrays sorting multidimensional-array associative-array

我有关联数组。在print_f($ array_name)上,我得到了这个

Array (
        [0] => Array (
            [teamid] => abc
            [distance] => 1.25
        )
        [1] => Array (
            [teamid] => xyz
            [distance] => 0.25
        )
    )

这是我想根据距离排序的数组。例如,排序后这应该是这样的,

Array (
    [0] => Array (
        [teamid] => xyz
        [distance] => 0.25
    )
    [1] => Array (
        [teamid] => abc
        [distance] => 1.25
    )
)

如果有人知道答案,请解释或建议我从一开始就能理解的链接。谢谢。

2 个答案:

答案 0 :(得分:2)

这是你需要做的。

$a = array(array( 'teamid' => 'abc', 'distance' => 1.25 ), array( 'teamid' => 'xyz', 'distance' => 0.25 ));

$distance = array();
foreach ($a as $key => $row)
{
    $distance[$key] = $row['distance'];
}
array_multisort($distance, SORT_ASC, $a);

print_r($a);

此输出

Array
(
    [0] => Array
        (
            [teamid] => xyz
            [distance] => 0.25
        )

    [1] => Array
        (
            [teamid] => abc
            [distance] => 1.25
        )

)

source 示例#3对数据库结果进行排序

<强> DEMO

修改

根据 Mike的评论,

here 是两个答案, 一个人告诉单array你应该使用usort(作为Mike的答案),array_multisort用于同时比较来自不同数组(或子数组)的元素。

在另一个答案中,迈克想要一些替补标记

  

usort()更简洁,不需要提取列数组来提供给array_multisort()。 (它也比array_multisort少。)

     

然而,当我今天在20,000和200的阵列上反复测试它时   10,000个代表性数据行 usort()比7-15倍慢    array_multisort()当列是int和int类型的随机值时   该列是预先提取的。这是人们可能期望的,因为   你比较整个php函数调用的每一个比较   优化内在代码。

有关基准测试笔记的更多信息,请阅读完整 answer

答案 1 :(得分:0)

$array = array(
    array('teamid' => 'a', 'distance' => 1.25),
    array('teamid' => 'b', 'distance' => 0.25),
    array('teamid' => 'c', 'distance' => 2.5),
    array('teamid' => 'd', 'distance' => 0.75),
);


function cmp($a, $b)
{
    if ($a['distance'] == $b['distance']) return 0;
    return ($a['distance'] < $b['distance']) ? -1 : 1;
}

usort($array, "cmp");

更多信息:http://php.net/usort