加载 TWIG 后,添加此过滤器:
$twig->addFilter( new Twig_SimpleFilter('cast_to_array', function ($stdClassObject) {
$response = array();
foreach ($stdClassObject as $key => $value) {
$response[] = array($key, $value);
}
return $response;
}));
根据Tadeck 的建议命名为cast_to_array。 :)
我确信它不适用于任何类型的 stdClass 对象,但它确实解决了我打印 PHP 关联数组 的问题 :) 按如下方式使用它:
{% for key, value in my_object|cast_to_array %}
<td>{{ value.1 }}</td>
{% endfor %}
支线故事
由于我经常进入这个 SO 页面,我认为有必要展示我在哪里使用 Twig 来迭代对象属性,因此它对其他有同样问题的人很有帮助:
我试图从 .json 源打印表格,但 PHP 的 json_decode 将任何 "key" : "value" 转换为 PHP 关联数组,默认情况下 Twig 不会打印该数组。
所以这个过滤器切割并提供一个常规数组供 Twig 使用。
source.json
{
"user": {
"family": {
"table": [{
"First_Name": "John",
"Last_Name": "Foo",
"Age": 25,
"Role": "Brother"
}, {
"First_Name": "Mary",
"Last_Name": "Bar",
"Age": 14,
"Role": "Sister"
}, {
"First_Name": "Joe",
"Last_Name": "Baz",
"Age": 33,
"Role": "Uncle"
}]
}
}
}
树枝
<table>
<thead>
<tr> {# get table headers from the table row #}
{% for row in user.family.table.0|cast_to_array %}
<th>{{ row.0 | replace({'_': ' '}) }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in user.family.table %}
<tr>
{% for key, value in row|cast_to_array %}
<td>{{ value.1 }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>