【问题标题】:Slight Issue with usortusort 的小问题
【发布时间】:2014-01-04 03:40:09
【问题描述】:

有一个小问题让我的数组正确地被Distance 损坏。我虽然使用usort 可以解决问题,但我显然弄错了?

排序

usort($return, function($a, $b){
    $t1 = $a['Distance'];
    $t2 = $b['Distance'];
    return $t1 - $t2;
}); 

$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
    )

)

【问题讨论】:

    标签: php arrays sorting multidimensional-array usort


    【解决方案1】:

    您在距离上使用strtotime 的任何原因?

    这应该可行:

    usort($return, function($a, $b){
        return $a['Distance'] - $b['Distance'];
    }); 
    

    编辑:

    好的,我知道问题出在哪里,如the doc 中所写:

    从比较函数返回非整数值,例如浮点数,将导致回调返回值的内部强制转换为整数。因此 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;
    }); 
    

    【讨论】:

    • @o7thWebDesign,这可能是一个不同的问题,我刚刚尝试过这段代码,它应该可以工作。您能否发布包含数据的完整代码?
    • 我不能给你数据。这是我从 USPS 导入 MySQL 的 CSV 转储。我给你举了一个上面返回数据的例子。完整的代码只是简单地返回上面完全未排序的数组。在一定程度上添加排序命令......只是不完全:ctauto.o7th.com/assets/temp.php
    • @o7thWebDesign,好的,我明白了问题所在,我已经更新了答案。
    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多