按列对二维数组的行进行排序[重复]

问题描述 投票:0回答:2

我有关联数组。在 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
    )
)

如果有人知道答案,请解释或建议我从我可以从头开始理解的链接。谢谢你。

php arrays sorting multidimensional-array associative-array
2个回答
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
        )

)

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

演示

编辑

根据迈克的评论,

这里有两个答案, 有人告诉您,在单个

array
上,您应该使用
usort
(如迈克的答案),并且
array_multisort
用于同时比较来自不同数组(或子数组)的元素。

在另一个答案中,因为迈克想要一些基准测试

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

然而,当我今天在 20,000 个数组上反复测试它时, 10,000 个代表性数据行,usort() 慢 7-15 倍 array_multisort() 当列是 int 类型的随机值时 该柱已预先提取。这正如人们所预料的那样,因为对于 每次比较您都将整个 php 函数调用进行比较 优化的内在代码。

有关基准测试笔记的更多信息,请阅读全文 答案


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

© www.soinside.com 2019 - 2024. All rights reserved.