我希望這不是一個重複的問題;我已經搜索無濟於事...PHP usort針對外部變量的對象數組
我想排序搜索返回的對象數組。我想按以下方式對結果進行排序:如果對象的「name」屬性與搜索查詢匹配,請將其放在頂部。接下來,如果「城市」屬性與查詢匹配,請將其放在下面。 (我打算稍後添加更多標準。)所以我並不嚴格比較值,而是將每個對象$a
與搜索查詢$q
進行比較。該陣列確實正在重新編制索引,但不是按照我期望的順序。我錯過了什麼?
function cmp($a, $b) {
global $q; // search query
$query = strtolower($q);
$name = strtolower($a->getName()); // defined in class
$city = strtolower($a->getCity()); // defined in class
if ($name == $query) {
return -1;
}
elseif ($city == $query) {
return -1;
}
return 0;
}
usort($cinemas, 'cmp'); // $cinemas is an array of objects
的CMP函數返回** 3 **東西的
strcmp
值:少(-1),等於(0),大於(+1)。你只返回兩個東西:-1和0 – 2014-09-03 18:40:41嗯...我試着添加另一個elseif返回1,但結果仍然以相同的方式排列(匹配城市不在頂部)。 – 2014-09-03 18:56:01
請給我一個你的'搜索查詢'數組的例子。即數組('名稱'=>'弗雷德','城市'=>'mycity')或者它是不同的格式?一些樣本數據和預期結果可能有用。您的評論「匹配的城市不在頂部」 - 我不確定這是怎麼回事。 – 2014-09-03 19:01:10