Twig按字段排序对象数组

use*_*229 16 twig

我有实体与字段:

用户

  • 名称
  • 年龄

还有更多.我发送给具有对象用户的Twig数组.

在表格中的树枝显示用户:

 {% for user in users %}
     <td>{{ user.name }}<td> <td>{{ user.lastname}}<td> <td>{{ user.age}}<td>
 {% endfor %}
Run Code Online (Sandbox Code Playgroud)

如何在Twig中通过名称或姓氏等对用户进行排序.我想创建可排序表.

cga*_*olo 18

从 Twig 2.12(2019 年 10 月 5 日发布)开始,您可以sortarrow参数中使用带有箭头函数的过滤器。

例如,按名称排序:

{% for user in users|sort((a, b) => a.name <=> b.name) %}
    <td>{{ user.name }}</td> <td>{{ user.lastname}}</td> <td>{{ user.age}}</td>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

树枝文档:https : //twig.symfony.com/doc/2.x/filters/sort.html

  • @biko `|sort((a, b) =&gt; a.age &lt;=&gt; b.age ?: a.name &lt;=&gt; b.name)` 这应该有效。如果你想从 asc 切换到 desc (或其他方式),只需将 a 与 b 切换即可。 (3认同)

unb*_*eak 16

是的,您可以添加自定义过滤器:

{% for user in users|usort %}
    ...
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

然后将扩展/新过滤器添加到Twig:

new \Twig_SimpleFilter('usort', array($this, 'usortFilter'))

public function usortFilter($item){
    usort($item, function ($item1, $item2) {
        if ($item1['orderNo'] == $item2['orderNo']) return 0;
        return $item1['orderNo'] < $item2['orderNo'] ? -1 : 1;
    });

    return $item;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

反向排序:

{% for user in users|sort|reverse %}
    ...
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

排序和反转是可组合的。

  • 这仅适用于数组,不适用于散列/对象。 (2认同)

Dev*_*ria 0

您必须在模型中使用“Order by”子句来执行此操作。但是,如果您想要一个可以动态排序的表,您应该关注 jQuery tablesorter 插件(如果您不想使用 jQuery,则可以使用等效插件)。

http://tablesorter.com/docs/