我的枝条文档,它是可能的迭代以下述方式关联数组中读:
{% for key, value in array %}
{{key}}
{{value}}
{% endfor %}
我想知道这是否是可能的类型stdClass的对象也是如此。
我本来期望的树枝来遍历对象服用属性名称作为键的属性值。 取而代之的是,包含在for循环的指令块根本没有执行。
我的枝条文档,它是可能的迭代以下述方式关联数组中读:
{% for key, value in array %}
{{key}}
{{value}}
{% endfor %}
我想知道这是否是可能的类型stdClass的对象也是如此。
我本来期望的树枝来遍历对象服用属性名称作为键的属性值。 取而代之的是,包含在for循环的指令块根本没有执行。
你可以先投的对象数组。 你可以建立自己的过滤器铸造你的对象数组。 有关过滤器可以在这里找到: http://twig.sensiolabs.org/doc/advanced.html#filters
然后,它可能看起来像:
{% for key, value in my_object|cast_to_array %}
加载TWIG后,加入这个过滤器:
$twig->addFilter( new Twig_SimpleFilter('cast_to_array', function ($stdClassObject) {
$response = array();
foreach ($stdClassObject as $key => $value) {
$response[] = array($key, $value);
}
return $response;
}));
它得名cast_to_array Tadeck的建议。 :)我敢肯定它不会对任何stdClass的对象的工作,但可以肯定的解决了我与印刷PHP 关联数组的问题:)使用它,如下所示:
{% for key, value in my_object|cast_to_array %}
<td>{{ value.1 }}</td>
{% endfor %}
自从我进入这个SO页面了很多,我认为这是相关的,以显示在那里我使用的树枝用于遍历对象的属性 ,所以它的其他人同样的问题有所帮助:我想从一个以.json打印表源,但PHP的json_decode将任何“关键”:“值”为PHP关联数组,枝杈默认情况下不打印。 因此,该过滤器的削减,并提供由嫩枝使用常规的阵列。
{
"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>
要在这里完成Tadeck的答案是如何:
如果你还没有创建过或设置一个枝条延伸(过滤器),您需要先按照使用说明http://symfony.com/doc/2.7/cookbook/templating/twig_extension.html
1)添加到您的appbundle /嫩枝/ AppExtension.php( 'cast_to_array')
public function getFilters()
{
return array(
new \Twig_SimpleFilter('md2html', array($this, 'markdownToHtml'), array('is_safe' => array('html'))),
new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
new \Twig_SimpleFilter('cast_to_array', array($this, 'objectFilter')),
);
}
2)添加到您的appbundle /嫩枝/ AppExtension.php
public function objectFilter($stdClassObject) {
// Just typecast it to an array
$response = (array)$stdClassObject;
return $response;
}
3)在您的example.html.twig环通与树枝和过滤器。
{% for key, value in row|cast_to_array %}
<td id="col" class="hidden-xs">{{ value }}</td>
{% endfor %}
做完后,我希望它能帮助。 从Tadeck的指针。
在这种情况下,可以帮助其他人。 你可以有枝杈迭代提供你实现PHP的Iterator接口的对象的属性。
在我来说,我有一个通用的对象用途的魔术方法__get(),__set(),__isset(),和__unset(同时存储在私有数组键值对)。 直到你想用这样的事情来遍历对象时,此工作在枝条细
<ul>
{% for prop, value in object %}
<li>{{prop|replace({'_': ' '})|title}}</li>
{% endfor %}
</ul>
为了使它工作,我必须实现Iterator接口。 然后,上面的代码工作完美。
现在,因为魔术__get()的属性名称不区分大小写或者使这些工作也。
<ul>
{% for object in arrayOfObjects %}
<li>{{ object.property }}</li>
<li>{{ object.Property }}</li>
<li>{{ object.PROPERTY }}</li>
{% endfor %}
</ul>
我知道这是旧的,但,是不是
$assoc_array = json_decode(json_encode($stdClassObject), TRUE);
工作一样好?