php - 将键值转换为树枝中的矩阵
问题描述
我使用 twig 将数据呈现为 html。我从服务器获得的数据是一个键值。例如 :
| Key | Value |
|-----|-------|
| A | 1 |
| A | 2 |
| B | |
| C | 10 |
我需要将这些数据呈现到这样的表中:
| A | B | C |
|---|---|----|
| 1 | 0 | 10 |
| 2 | 0 | 0 |
这是我尝试过的:
<table>
<thead>
<tr>
{% set now = '' %}
{% set arrKey = [] %}
{% for data in datas %}
{% if now != data.key %}
<th>{{ data.key }}</th>
{% set now = data.key %}
{% else %}
{% set arrKey = arrKey|merge([now]) %}
{% endif %}
{% endfor %}
</tr>
</thead>
<tbody>
{% set rowNow = '' %}
{% for key in arrKey %}
<tr>
{% for data in datas %}
{% if rowNow != dataKey %}
{% if data.value is empty %}
<td>0</td>
{% else %}
<td>{{ data.value }}</td>
{% endif %}
{% set rowNow = data.key %}
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
但这仍然是错误的,它将呈现:
| A | B | C |
|---|---|----|
| 1 | 0 | 10 |
| 1 | 0 | 10 |
请帮我解决这个问题?
解决方案
管理此问题的最佳方法是转换控制器内部的数据。这是因为merge
过滤器很难使用。无论如何,如果您想以纯的方式进行twig
,这就是方法
{% set data = [
{ 'key': 'A', 'value': 1, },
{ 'key': 'A', 'value': 2, },
{ 'key': 'B', 'value': null, },
{ 'key': 'C', 'value': 2, },
{ 'key': 'C', 'value': 4, },
{ 'key': 'A', 'value': 3, },
{ 'key': 'A', 'value': 4, },
] %}
{% set temp = [] %}
{% for row in data %}
{% if not (row.key in temp|keys) %}
{% set temp = temp | merge({ (row.key) : [] }) %}
{% endif %}
{% set temp = temp | merge({(row.key):(temp[row.key]|merge([ row.value, ]))}) %}
{% endfor %}
{% set max = 0 %}
{% for data in temp %}{% if data|length > max %}{% set max = data|length %}{% endif %}{% endfor %}
<table>
<tr>
{% for key in temp|keys %}
<th>{{ key }}</th>
{% endfor %}
</tr>
{% for i in 0..(max-1) %}
<tr>
{% for data in temp %}
<td>{{ data[i] | default(0) }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
推荐阅读
- vba - 我在 Access 中创建了一个表单,该表单对应于具有零属性的表
- bash - 将每行具有多个值的 .csv 文件转换为每行一个
- java - Java SecurityManager 授权与授权代码库
- php - woocommerce 在科尔多瓦添加到购物车问题
- java - 将 postgresql 数据库添加到 travis
- api - 使用 Spring Boot 和 LDAP 的 RESTful API 身份验证
- laravel - 跳过 Laravel 的 FormRequest 验证
- algorithm - 如何计算回溯的空间复杂度?
- node.js - 如何使用其链接的 css 文件呈现部分视图
- python - 保持选定的树视图行可见