我正在开发一个小PHP函数,它将根据项目是否返回isVerified
来排序数组。如果它实际上已经过验证,我希望这些结果显示在列表的顶部。我承认我不是最熟悉的PHP而且我一直在做大量的阅读,因为我认为可能有一种方法可以让这更容易。阅读它听起来像是uasort()是我需要的排序能力,它维护索引关联,但我有点困惑,如何正确使用它。我正在处理的原始PHP块看起来像这样:
<?php
if (count($results)):
$lexisIndex = 1;
foreach ($results as $person){
$person->isVerified = (substr($person->first_name, 0, 1) == substr($fname, 0, 1) && $person->last_name == $lname );
$person->lexisIndex = $lexisIndex++;
}
foreach ($results as $person):
?>
从这里我将$results
放入一个数组并将其传递给一个uasort函数。在我添加了我认为需要的代码后,代码看起来像这样:
<?php
if (count($results)):
$lexisIndex = 1;
foreach ($results as $person){
$person->isVerified = (substr($person->first_name, 0, 1) == substr($fname, 0, 1) && $person->last_name == $lname );
$person->lexisIndex = $lexisIndex++;
}
$array = array($results);
uasort($array, function($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b ? -1 : 1);
});
foreach ($results as $person):
?>
这对我来说仍然没有用,并没有抛出任何错误,所以我有一段时间试图解决这个错误。我正在使用我正在使用的东西吗?或者这可以以更有效的方式完成吗?如果这听起来像是之前被问过的问题,我很抱歉,但在搜索时我无法找到解决方法。如果这是重复的,我非常乐意点击链接并进行更多阅读。感谢您的时间和帮助。
答案 0 :(得分:1)
$a
和$b
是数组的元素。所以在你的情况下,它们是人物对象,那就是你应该如何比较它们:
uasort($array, function($a, $b) {
// isVerified is most important. Move to top.
if ($a->isVerified != $b->isVerified ) {
return ($a->verified ? -1 : 1);
}
// If neither or both are verified, compare based on lexisindex.
return $a->lexisIndex - $b->lexisIndex;
});
最后一行只是一个捷径。比较函数不需要返回-1,0或1.它只接受任何值&lt; 0表示$a
更小&#39;比$b
,0代表相等或&gt; larger
为0。因此,您当前的比较回调(可以比较数值)也可以写为return $a - $b;
。您也可以像这样写下最后一行,但这不是必需的:
return ($a->lexisIndex < $b->lexisIndex ? -1 : 1);