2013-12-16 43 views
0

有一個輕微的問題,讓我的陣列適合Distance sory。我雖然使用usort可以做到這一點,但我顯然錯了?輕微問題與使用

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 
    ) 

) 

回答

2

您在使用距離任何strtotime原因?

這應該工作:

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

編輯:

好吧,我看到的問題是什麼,寫在the doc

從比較返回非整數值函數(如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; 
}); 
+0

@ o7thWebDesign,它可能是一個不同的問題,那麼,我只是嘗試這樣的代碼,它應該工作。你能發佈你的完整代碼,包括數據嗎? –

+0

我不能給你數據。這是我導入MySQL的USPS的CSV轉儲。我給你舉了一個上面返回數據的例子。完整的代碼只是返回完全未排序的數組。添加在usort命令它的程度...只是不完全:http://ctauto.o7th.com/assets/temp.php – Kevin

+0

@ o7thWebDesign,好吧,我看到了什麼問題,我已經更新了我的答案。 –