我有关联数组。在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
)
)
如果有人知道答案,请解释或建议我从一开始就能理解的链接。谢谢。
答案 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