Php 如何对关联数组排序?
我有关联数组。在print\u f($array\u name)上,我得到了这个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 )
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");