2011-09-22 45 views
0
function sort_searches($a, $b) 
{ 
    return 
    (
     (isset($b['Class_ID']) && !isset($a['Class_ID'])) 
     || 
     ($b['Results'] && !$a['Results']) 
     || 
     (is_array($a['Results']) && !$a['Results'] && !is_array($b['Results'])) 
    ); 
} 

我在usort()中使用此功能。預期的效果是,搜索列表將首先按其是否具有Class_ID排序,然後按結果排序(使用非空數組的結果>結果=== false>結果===空數組())。有序集合搜索會是什麼樣子:對結果用戶自定義排序功能幫助

Class_ID with results 
Class_ID with results === false 
Class_ID with results === array() 
No Class_ID with results 
No Class_ID with results === false 
No Class_ID with results === array() 

目前功能種類完全沒問題,但不能在搜索是否有類標識碼

usort($searches, 'sort_searches') 

回答

1

the PHP docs

如果第一個參數分別小於,等於或大於第二個參數,則比較函數必須返回小於,等於或大於零的整數。

你的函數沒有返回一個整數。


拼寫出來,假設我們想寫數字的排序功能(完全沒有必要的,但對於運動):

function sort_nums($a, $b) 
{ 
    if ($a < $b) return -1; // $a is less than $b 
    if ($a > $b) return 1; // $a is greater than $b 
    return 0; // $a is equal to $b 
} 
+0

只是重讀您的文章。基本上你說我需要返回-1時$ a <$ b,而不是0? – babonk

+0

@babonk - 查看我更新的答案... –

+0

謝謝,將試試這個並回復給你 – babonk