在树枝中重组阵列

发布于 2025-02-01 17:32:52 字数 1951 浏览 2 评论 0 原文

我想倒入数组,以便第一个类别是首先,以便以后可以更好地管理自己的foreach。 我设法实现了它,但是Merge删除了相同的密钥。而且我不应该将值添加为数组中的另一个项目。

默认数组:

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 %} 

I want to invert my array so that the categories are first so that I can better manage my foreach later. I managed to achieve it, but merge has removed the same keys. And I should not add value as another item in the array.

Default Array:

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"
    }
]

After Merge: ( two records have been deleted :()

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

What is he trying to achieve?

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"
            }
        ]
    ]
]

Code:

{% set organised_cats = {} %}

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故笙诉离歌 2025-02-08 17:32:52

首先是仅供参考,这不是您在模板中应该做的事情,因为代码非常混乱。无论如何,这是您在 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 %}

demo

recsated问题

First a FYI though, this is not something you should be doing in the template, cause the code is pretty messy. Anyway here is how you merge/group arrays in 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 %}

demo

related problem

issues with merge in twig

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文