我希望这不是一个重复的问题;我已经搜索无济于事...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