Php 如何对关联数组排序?

Php 如何对关联数组排序?,php,arrays,sorting,multidimensional-array,associative-array,Php,Arrays,Sorting,Multidimensional Array,Associative Array,我有关联数组。在print\u f($array\u name)上,我得到了这个 Array ( [0] => Array ( [teamid] => abc [distance] => 1.25 ) [1] => Array ( [teamid] => xyz [distance] => 0.25 )

我有关联数组。在print\u f($array\u 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
    )
)

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

以下是您需要做的事情

$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
        )

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

编辑

根据迈克的评论

有两个答案, 其中一个告诉我们,在单个
数组上
应该使用(正如Mike的回答),并用于同时比较来自不同数组(或子数组)的元素

在另一个答案中,迈克想要一些基准点

usort()更简洁,不需要提取列数组来馈送到数组\ u multisort()。(它也比array_multisort做得少。)

然而,当我今天在20000和10000个阵列上反复测试它时 10000个代表性数据行,usort()数组\u multisort()当列为int和 预提取柱。这正是人们所期待的,因为 将整个php函数调用与之进行比较的每次比较 优化的内部代码

有关基准点注释的更多信息,请完整阅读

$array=array(
数组('teamid'=>a','distance'=>1.25),
数组('teamid'=>'b','distance'=>0.25),
数组('teamid'=>c','distance'=>2.5),
数组('teamid'=>d','distance'=>0.75),
);
功能cmp($a$b)
{
如果($a['distance']=$b['distance'])返回0;
回报($a['distance']<$b['distance'])?-1:1;
}
usort($数组,“cmp”);

更多信息:

您的链接是检查此链接,我希望看到
array\u multisort
usort
之间的基准(如我在单独的回答中所建议的)。我认为OP最好跳过您建议的
array\u multisort
所需的额外
foreach
循环。感谢您的跟进,这里有一些有趣的信息!更新我的答案。:)
$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");