gpt4 book ai didi

arrays - 按特定的自定义字段对 Doctrine ArrayCollection 进行排序

转载 作者:行者123 更新时间:2023-12-05 00:58:57 25 4
gpt4 key购买 nike

我正在尝试按特定字段对 ArrayCollection 进行排序。 ArrayCollection 是一个类(class)数组。在 Course 实体中有一个名为 isLive 的方法,它返回一个 bool 值。

我想对这个集合进行排序,使“实时”类(class)位于数组的开头,这就是从 isLive 调用返回 true 的类(class)。

这是我目前拥有的代码,但是$sorted数组中的第一个条目是非实时类(class)。

$iterator = $this->courses->getIterator();
$iterator->uasort(function ($a, $b) {
if ($a->isLive() == $b->isLive()) {
return 0;
}
return ($a->isLive() < $b->isLive()) ? -1 : 1;
});
$sorted = new ArrayCollection(iterator_to_array($iterator));

最佳答案

它看起来是 Doctrine Criteria 的一个很好的用例.它们允许过滤/排序 ArrayCollections,如果集合已经加载,则在内存中,或者通过添加 WHERE/ORDER BY SQL 子句下次加载集合数据库。所以这是相当优化的!

假设您在 isLive() 后面有一个 live 字段,代码应该看起来像这样:

$criteria = Criteria::create()
->orderBy(["live" => Criteria::DESC])
;

$sorted = $this->courses->matching($criteria);

关于arrays - 按特定的自定义字段对 Doctrine ArrayCollection 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com