Как легко поместить элемент в массив в Twig

Для разработчика PHP добавление элементов в существующий массив довольно просто, как использование array_push. К сожалению, метод или фильтр с тем же именем в Twig недоступны без создания собственного расширения, однако вы можете добиться хорошего результата, используя фильтр слияния.

Неассоциативные массивы

Если исходный массив не является ассоциативным, и вы хотите добавить элемент, игнорируя тип значения, фильтр слияния ожидает в качестве первого аргумента массив, содержимое которого будет объединено с назначенной переменной:

{% set myArray = [] %}
{% set myArray = myArray|merge([1]) %}
{% set myArray = myArray|merge([2,3]) %}
{% set myArray = myArray|merge([4]) %}
{#
The content of myArray is
myArray = [1,2,3,4]
#}

Обратите внимание, что вы можете создавать любой сложный контент, используя тот же синтаксис:

{% set myArray = [] %}
{% set myArray = myArray|merge([
[1,2],
[3,4],
[5,6]
]) %}
{% set myArray = myArray|merge([
[
[1,2]
],
[
[3,4]
],
]) %}
{#
The content of myArray is
myArray = [
[
1,2
],
[
3,4
],
[
5,6
],
[
[1,2]
],
[
[3,4]
]
]
#}

Ассоциативные массивы

Чтобы добавить элементы в ассоциативный массив, вы должны передать в качестве первого аргумента только массив с скобками с новыми значениями:

{# Note that the original array in this case has an item #}
{% set myArray = {
"first": 1
} %}
{% set myArray = myArray|merge({
"second": 2
}) %}
{% set myArray = myArray|merge({
"third": 3
}) %}
{#
The content of myArray is
myArray = {
"first":1,
"second":2,
"third":3
}
#}

Обратите внимание, что фильтр слияния использования array_merge в фоновом режиме, что означает, что если вы работаете с ассоциированным массивом, если ключ уже существует в элементе, он будет перезаписан:

{# Note that the original array in this case has an item #}
{% set myArray = {
"first": 1
} %}
{# Add the "second" key with value 2 #}
{% set myArray = myArray|merge({
"second": 2
}) %}
{# Change the value of the "second" key#}
{% set myArray = myArray|merge({
"second": "Modified 2"
}) %}
{#
The content of myArray is
myArray = {
"first":1,
"second":"Modified 2"
}
#}
Ссылка на основную публикацию
Adblock
detector