Php 与usort的轻微问题
让我的阵列正确地通过Php 与usort的轻微问题,php,arrays,sorting,multidimensional-array,usort,Php,Arrays,Sorting,Multidimensional Array,Usort,让我的阵列正确地通过Distance进行排序有一个小问题。我认为使用usort可以达到目的,但我显然弄错了 乌斯波特 $return产生: Array ( [0] => Array ( [ZipCode] => 06096 [Distance] => 0 ) [1] => Array ( [ZipCode] => 06096 [Distance] => 0 )
Distance
进行排序有一个小问题。我认为使用usort可以达到目的,但我显然弄错了
乌斯波特
$return
产生:
Array
(
[0] => Array
(
[ZipCode] => 06096
[Distance] => 0
)
[1] => Array
(
[ZipCode] => 06096
[Distance] => 0
)
[2] => Array
(
[ZipCode] => 06026
[Distance] => 3.16
)
[3] => Array
(
[ZipCode] => 06080
[Distance] => 4.14
)
[4] => Array
(
[ZipCode] => 06080
[Distance] => 4.14
)
[5] => Array
(
[ZipCode] => 06078
[Distance] => 4.14
)
[6] => Array
(
[ZipCode] => 06064
[Distance] => 3.6
)
[7] => Array
(
[ZipCode] => 06028
[Distance] => 3.6
)
[8] => Array
(
[ZipCode] => 06028
[Distance] => 3.6
)
[9] => Array
(
[ZipCode] => 06006
[Distance] => 4.83
)
[10] => Array
(
[ZipCode] => 06095
[Distance] => 4.83
)
[11] => Array
(
[ZipCode] => 06095
[Distance] => 4.83
)
[12] => Array
(
[ZipCode] => 06006
[Distance] => 4.83
)
)
您使用
strotime
距离的原因是什么
这应该起作用:
usort($return, function($a, $b){
return $a['Distance'] - $b['Distance'];
});
编辑:
好的,我知道问题出在哪里了,如中所述:
从比较函数返回非整数值,例如float,将导致回调返回值的内部转换为整数。因此,0.99和0.1等值都将转换为0的整数值,这将比较这些值是否相等
因此,解决方案是确保比较函数始终返回一个整数:
usort($return, function($a, $b){
$t1 = $a['Distance'];
$t2 = $b['Distance'];
if ($t1 == $t2) return 0;
return $t1 < $t2 ? -1 : 1;
});
usort($return,function($a,$b){
$t1=$a[‘距离’];
$t2=$b[‘距离’];
如果($t1=$t2)返回0;
返回$t1<$t2?-1:1;
});
@o7thWebDesign,这可能是另一个问题,我刚刚尝试了这段代码,它应该可以工作。你能把包括数据在内的完整代码贴出来吗?我不能给你数据。这是我从USPS导入MySQL的CSV转储。我给你们举了一个上面返回数据的例子。完整代码只返回上面完全未排序的数组。在usort中添加命令在一定程度上。。。只是不完全:@o7thWebDesign,好吧,我知道问题出在哪里了,我已经更新了答案。
usort($return, function($a, $b){
$t1 = $a['Distance'];
$t2 = $b['Distance'];
if ($t1 == $t2) return 0;
return $t1 < $t2 ? -1 : 1;
});