循环遍历多维数组,其中一个变量作为另一个变量的 属性

Loop through multidimensional Array with a variable as a property for another variable

我需要遍历 twig 中的多维数组。

//编辑:我仍然没有找到解决方案,我尝试了带有属性的建议,但它没有用。在这里你可以看到整个代码和错误消息,也许有人可以帮助我。我真的试图理解这个问题,但每次尝试解决方案都失败了:/

首先我有包含不同字符串的数组 category
字符串是用户定义的,因此它们因用户而异。例如:CarFoodSport

第二个数组 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>

再次感谢您的努力!