如何在Twig模板中对对象数组进行不区分大小写排序?
在Twig中实现不区分大小写的数组排序(模拟strnatcasecmp)
当然可行,有两种常用方案可以实现你的需求:
方案1:基础不区分大小写字典序排序
把对象的name字段统一转成小写后再比较,就能避免大小写导致的排序偏差:
{% for station in value|sort((a, b) => a.name|lower <=> b.name|lower) %} <div>...</div> {% endfor %}
通过lower过滤器将两个名称都转换为小写,再用太空船运算符<=>进行比较,这样就能实现不区分大小写的字典序排序。
方案2:模拟PHP的strnatcasecmp自然排序
如果需要像strnatcasecmp那样支持自然排序(比如让"Station 10"排在"Station 2"之后),可以直接在排序回调中调用PHP的原生函数:
{% for station in value|sort((a, b) => strnatcasecmp(a.name, b.name)) %} <div>...</div> {% endfor %}
strnatcasecmp会自动处理不区分大小写的自然排序逻辑,完全匹配你的需求。只要你的Twig环境没有严格限制PHP函数调用,这个写法就能正常工作。
注意:如果你的Twig版本低于2.10,箭头函数语法不被支持,建议升级Twig版本,或者改用
sort过滤器的传统参数写法。
内容的提问来源于stack exchange,提问作者Jaime Roman
相关产品推荐
相关产品推荐

