1 回答
TA贡献1799条经验 获得超9个赞
executeQuery方法返回MongoDB\Driver\Cursor。它实现了Traversable接口,因此您可以foreach
对其进行操作。这可能会让您感到困惑,认为它是一个数组。其实不是。
要对结果进行排序,您需要首先将游标转为数组。然后,如果我理解正确的话,您将按“详细信息”数组的大小对行进行排序,如下所示:
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery("DB.col", $query);
$rows = $cursor->toArray();
usort($rows, function ($a, $b) {
return sizeof($a->detail) <=> sizeof($b->detail);
});
return $rows;
注意:如果顺序颠倒,只需交换call比较函数中的$a->detail
and即可。$b->detail
usort()
如果您没有使用 PHP 7,则可能没有可以使用的spaceship 运算符。 <=>
只需使用此比较函数即可:
usort($rows, function ($a, $b) {
if (sizeof($a->detail) == sizeof($b->detail)) {
return 0;
}
return (sizeof($a->detail) > sizeof($b->detail)) ? 1 : -1;
});
PS 你真的应该升级到 PHP 7。PHP 5.6 已经不再支持多年了。它的性能较差且安全性较差。
- 1 回答
- 0 关注
- 82 浏览
添加回答
举报