Symfony 用于排序规则ArrayCollection的细枝扩展

Symfony 用于排序规则ArrayCollection的细枝扩展,symfony,twig,arraycollection,Symfony,Twig,Arraycollection,我正在尝试编写一个细枝过滤器,以便能够对Doctrine ArrayCollection进行排序,但返回的数组未排序:(您能否帮助我修复此问题: class SortExtension extends \Twig_Extension { public function getFilters() { return array( new \Twig_SimpleFilter('sortby', array($this, 'sortByFil

我正在尝试编写一个细枝过滤器,以便能够对Doctrine ArrayCollection进行排序,但返回的数组未排序:(您能否帮助我修复此问题:

class SortExtension extends \Twig_Extension
{ 

    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('sortby', array($this, 'sortByFilter')),
        );
    }

    public function sortbyname( $a, $b )
    {       
        if ($a->getName() === $b->getName()) {
            return 0;
        }
        if ( $a->getName() < $b->getName() ) {
            return 1;                 
        }
        return -1;
    }

    public function sortByFilter($collection)
    {
        $iterator = $collection->getIterator();
        $iterator->uasort(array($this, 'sortbyname'));

        return $collection;
    } 
class SortExtension扩展\Twig\u扩展
{ 
公共函数getFilters()
{
返回数组(
新建\Twig\u SimpleFilter('sortby',array($this,'sortByFilter'),
);
}
公共函数sortbyname($a,$b)
{       
如果($a->getName()==$b->getName()){
返回0;
}
如果($a->getName()<$b->getName()){
返回1;
}
返回-1;
}
公共函数排序过滤器($collection)
{
$iterator=$collection->getIterator();
$iterator->uasort(数组($this,'sortbyname'));
退回$collection;
} 

我不太确定sortByFilter中返回的集合是否已更改。

这是因为您正在获取迭代器并对其进行排序。
该方法创建一个新的
ArrayIterator
,它将创建数组的副本。
然后,返回未排序的集合

一个发生的小例子

你只需要更换

return $collection;


非常感谢您快速的回答和精彩的解释!:)
return $iterator;