循环遍历多维数组,其中一个变量作为另一个变量的 属性
Loop through multidimensional Array with a variable as a property for another variable
我需要遍历 twig 中的多维数组。
//编辑:我仍然没有找到解决方案,我尝试了带有属性的建议,但它没有用。在这里你可以看到整个代码和错误消息,也许有人可以帮助我。我真的试图理解这个问题,但每次尝试解决方案都失败了:/
首先我有包含不同字符串的数组 category
。
字符串是用户定义的,因此它们因用户而异。例如:Car
、Food
、Sport
第二个数组 array
是多维数组,如下所示:
array(12) {
["01"]=>
array(3) {
["Food"]=>float(861)
["Car"]=>float(300)
["Sport"]=>float(80)
}
["02"]=>
array(3) {
["Food"]=>float(12)
["Car"]=>float(199)
["Sport"]=>int(0)
}
["03"]=>
array(3) {
["Food"]=>int(0)
["Car"]=>int(0)
["Sport"]=>float(80)
}
… 9 more
我的 Twig 代码如下所示
{% for category in categorys %}
<tr>
<th>{{category}}</th>
{% for line in array %}
<td> {{ attribute(line, category) }} </td
{% endfor %}
</tr>
{% endfor %}
最后的 table 应该是这样的:
|食品 | 861| 300 | 80 |
|汽车 | 12 | 199 |0 |
|运动 | 0 | 0 | 80 |
当我使用属性函数时,错误消息是:
isset 中的非法偏移类型或为空
**类型错误
在 C:\xampp\htdocs\MMM2\vendor\twig\twig\src\Extension\CoreExtension.php(第 1437 行)
--> if (((\is_array($object) || $object instanceof \ArrayObject) && (isset($object[$arrayItem]) || \array_key_exists( $arrayItem, (array) $object))) || ($object instanceof ArrayAccess && isset($object[$arrayItem]))**
我如何在这种情况下使用变量类别?
也许有人可以帮助我,
我不知道如何继续..
提前致谢!
我不完全确定你在寻找什么,我也不完全确定你的数据结构是什么样的。但是如果你的数据是这样的:
$this->render('foo.html', [
'categories' => [ 'Food', 'Car', 'Sport' ],
'values' => [
[ 'Food' => 861, 'Car' => 300, 'Sport' => 80 ],
[ 'Food' => 12, 'Car' => 199, 'Sport' => 0 ]
]
]);
像这样的东西应该可以工作:
<table>
{% for category in categories %}
<tr>
<th>{{ category }}</th>
{% for line in values %}
<td>{{ attribute(line, category) }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
它应该呈现这个:
<table>
<tr>
<th>Food</th>
<td>861</td>
<td>12</td>
</tr>
...
</table>
好的伙计们,感谢大家,尤其是 Bjorn 的帮助。
我终于找到了我的问题,因为我的一个朋友在 php.
方面比我更有经验。
我的问题是 category-array.. 这个数组不仅保存了文本,还保存了整个对象.. 所以我必须将 .name 添加到类别中,这样我才能得到字符串“Food, Car, Sport”.. .
答案看起来像这样
<table>
{% for category in categories %}
<tr>
<th>{{ category }}</th>
{% for line in values %}
<td>{{ attribute(line, category.name) }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
再次感谢您的努力!
我需要遍历 twig 中的多维数组。
//编辑:我仍然没有找到解决方案,我尝试了带有属性的建议,但它没有用。在这里你可以看到整个代码和错误消息,也许有人可以帮助我。我真的试图理解这个问题,但每次尝试解决方案都失败了:/
首先我有包含不同字符串的数组 category
。
字符串是用户定义的,因此它们因用户而异。例如:Car
、Food
、Sport
第二个数组 array
是多维数组,如下所示:
array(12) {
["01"]=>
array(3) {
["Food"]=>float(861)
["Car"]=>float(300)
["Sport"]=>float(80)
}
["02"]=>
array(3) {
["Food"]=>float(12)
["Car"]=>float(199)
["Sport"]=>int(0)
}
["03"]=>
array(3) {
["Food"]=>int(0)
["Car"]=>int(0)
["Sport"]=>float(80)
}
… 9 more
我的 Twig 代码如下所示
{% for category in categorys %}
<tr>
<th>{{category}}</th>
{% for line in array %}
<td> {{ attribute(line, category) }} </td
{% endfor %}
</tr>
{% endfor %}
最后的 table 应该是这样的:
|食品 | 861| 300 | 80 |
|汽车 | 12 | 199 |0 |
|运动 | 0 | 0 | 80 |
当我使用属性函数时,错误消息是: isset 中的非法偏移类型或为空
**类型错误 在 C:\xampp\htdocs\MMM2\vendor\twig\twig\src\Extension\CoreExtension.php(第 1437 行)
--> if (((\is_array($object) || $object instanceof \ArrayObject) && (isset($object[$arrayItem]) || \array_key_exists( $arrayItem, (array) $object))) || ($object instanceof ArrayAccess && isset($object[$arrayItem]))**
我如何在这种情况下使用变量类别? 也许有人可以帮助我, 我不知道如何继续.. 提前致谢!
我不完全确定你在寻找什么,我也不完全确定你的数据结构是什么样的。但是如果你的数据是这样的:
$this->render('foo.html', [
'categories' => [ 'Food', 'Car', 'Sport' ],
'values' => [
[ 'Food' => 861, 'Car' => 300, 'Sport' => 80 ],
[ 'Food' => 12, 'Car' => 199, 'Sport' => 0 ]
]
]);
像这样的东西应该可以工作:
<table>
{% for category in categories %}
<tr>
<th>{{ category }}</th>
{% for line in values %}
<td>{{ attribute(line, category) }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
它应该呈现这个:
<table>
<tr>
<th>Food</th>
<td>861</td>
<td>12</td>
</tr>
...
</table>
好的伙计们,感谢大家,尤其是 Bjorn 的帮助。 我终于找到了我的问题,因为我的一个朋友在 php.
方面比我更有经验。我的问题是 category-array.. 这个数组不仅保存了文本,还保存了整个对象.. 所以我必须将 .name 添加到类别中,这样我才能得到字符串“Food, Car, Sport”.. .
答案看起来像这样
<table>
{% for category in categories %}
<tr>
<th>{{ category }}</th>
{% for line in values %}
<td>{{ attribute(line, category.name) }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
再次感谢您的努力!