如何在Twig中对含逗号的姓名按字母排序?排查代码问题
问题排查与解决方案
1. 修正明显语法错误
你第一种写法存在逻辑漏洞:比较b的部分仅写了b.post.title.split(','),未取数组第一个元素[0],导致用字符串和数组做比较,直接让排序逻辑失效。正确写法需确保两边都提取逗号前的姓名部分:
{% for post in relationship.from|sort((a, b) => a.post.title.split(',')[0] <=> b.post.title.split(',')[0]) %} {# 你的渲染内容 #} {% endfor %}
2. 检查Twig版本兼容性
Twig的箭头函数(=>)语法是Twig 2.10及以上版本才支持的特性。如果你的Twig版本低于2.10,箭头函数会被判定为无效语法,排序自然不生效。此时需改用旧版匿名函数写法:
{% for post in relationship.from|sort(function(a, b) { return a.post.title.split(',')[0] <=> b.post.title.split(',')[0]; }) %} {# 你的渲染内容 #} {% endfor %}
3. 优化格式避免解析异常
虽然Twig对空格容忍度较高,但sort过滤器与后续括号间的空格可能引发解析问题,建议去掉空格,写成|sort((a, b) => ...)而非|sort ((a, b) => ...)。
逻辑验证说明
split(',')[0]会提取出逗号前的完整姓名(如John Doe、Jane Doe),通过<=>运算符做自然字符串比较时,Jane的字母顺序确实早于John,修正后即可得到你预期的排序结果。
内容的提问来源于stack exchange,提问作者Jonathan Tucker
相关产品推荐
相关产品推荐

