用于排序 Doctrine ArrayCollection 的 Twig 扩展

问题描述 投票:0回答:1

我正在尝试编写一个 Twig 过滤器来对 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;
    } 

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

php symfony twig arraycollection
1个回答
2
投票

这是因为您正在获取迭代器并对其进行排序。
方法

getIterator
创建一个新的
ArrayIterator
,它会复制数组。
然后,您将返回未排序的集合。

这是所发生情况的一个小示例。

你只需更换

return $collection;

return $iterator;
© www.soinside.com 2019 - 2024. All rights reserved.