我有关联数组。在 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
)
)
如果有人知道答案,请解释或建议我从我可以从头开始理解的链接。谢谢你。
这是您需要做的。
$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 函数调用进行比较 优化的内在代码。
有关基准测试笔记的更多信息,请阅读全文 答案
$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