Twig的for循环三操作数语法含义是什么?迁移到Twig 3是否兼容?
Twig for循环多变量赋值语法说明
语法合法性判定
你看到的{% for key, name, values in tag %}是Twig 1.x版本的合法语法,属于嵌套结构遍历的简写特性,官方文档仅在多维数组遍历章节做了简略提及,所以不容易查到相关说明。
语法作用解释
该写法不是每次随机提取3个值,仅适用于tag为外层键值对+内层固定长度有序结构的二维嵌套场景:
- 第一个变量
key对应外层遍历的键名/索引 - 从第二个变量开始,依次对应内层有序结构的第N个值
- 如果内层结构长度小于for头部定义的变量数,多余变量会被赋值为
null
实际运行示例
假设后端给tag传入的PHP结构如下:
$tag = [ 'color' => ['颜色', ['红', '蓝', '绿']], 'size' => ['尺码', ['S', 'M', 'L', 'XL']], 'material' => ['材质', ['棉', '涤纶', '尼龙']] ];
对应Twig 1的循环运行结果为:
- 第一次循环:
key = 'color',name = '颜色',values = ['红', '蓝', '绿'] - 第二次循环:
key = 'size',name = '尺码',values = ['S', 'M', 'L', 'XL'] - 第三次循环:
key = 'material',name = '材质',values = ['棉', '涤纶', '尼龙']
Twig 3迁移适配方案
Twig 3及后续版本已经移除了该简写特性,需要改成显式读取内层结构的写法,和原有逻辑完全等价的改写代码如下:
{% for key, item in tag %} {% set name = item[0] %} {% set values = item[1] %} {# 原有循环内部的业务代码无需修改 #} ... {% endfor %}
改写后的代码同时兼容Twig 2和Twig 3版本,不会产生逻辑差异
内容的提问来源于stack exchange,提问作者jcmargentina
相关产品推荐
相关产品推荐

