在树枝中重新组织数组



我想反转我的数组,使类别是第一个,这样我可以更好地管理我的foreach以后。我设法实现了它,但合并已经删除了相同的键。我不应该在数组中添加值作为另一项。

默认数组:

array:10 [
0 => array:2 [
"type" => "type1"
"object" => {
name: "Sample name 1"
category: "Cat1"
}
]
1 => array:2 [
"type" => "type1"
"object" => {
name: "Sample name 2"
category: "Cat2"
}
]
2 => array:2 [
"type" => "type1"
"object" => {
name: "Sample name 3"
category: "Cat1"
}
]
3 => array:2 [
"type" => "type1"
"object" => {
name: "Sample name 4"
category: "Cat2"
}
]

合并后:(两条记录已删除)

array:2 [
"Cat1" => array:2 [
"type" => "type1"
"object" => ...
]
"Cat2" => array:2 [
"type" => "type1"
"object" => ...
]
]

他想达到什么目的?

array:2 [
"Cat1" => array:2 [
0 => array:2 [
"type" => "type1"
"object" => {
name: "Sample name 1"
category: "Cat1"
}
]
1 => array:2 [
"type" => "type1"
"object" => {
name: "Sample name 3"
category: "Cat1"
}
]
]
"Cat2" => array:2 [
0 => array:2 [
"type" => "type1"
"object" => {
name: "Sample name 2"
category: "Cat2"
}
]
1 => array:2 [
"type" => "type1"
"object" => {
name: "Sample name 4"
category: "Cat2"
}
]
]
]

代码:

{% set organised_cats = {} %}
{% for element in sourceElements %}
{% set organised_cats = organised_cats|merge({
(element.object.category) : element
}) %}
{% endfor %} 

首先供您参考,这不是您应该在模板中做的事情,因为代码相当混乱。无论如何,以下是如何在twig中合并/分组数组:

{% set output = [] %}
{% for item in items %}
{% if not attribute(output, item.object.category) is defined %}
{% set output = output|merge({ (item.object.category) : {}, }) %}
{% endif %}
{% set output = output|merge({(item.object.category) : output[item.object.category] | merge([ item, ]) }) %}
{% endfor %}
{% for category, items in output %}
{{ category }}:
{% for item in items %}
{{ item.object.name }}
{% endfor %}
{% endfor %}

演示

有关问题关于合并的问题

最新更新