[php] Twig에서 배열의 설정 요소

Twig에서 이미 존재하는 어레이의 구성원을 어떻게 설정할 수 있습니까?

다음 방법으로 시도했습니다.

{% set arr['element'] = 'value' %}

하지만 다음과 같은 오류가 발생했습니다.

…에서 값 “[“( “명령문 블록의 끝”예상 됨)의 예기치 않은 토큰 “구두점”



답변

Twig에서이 작업을 수행하는 좋은 방법은 없습니다. 그러나 병합 필터를 사용하면 가능합니다.

{% set arr = arr|merge({'element': 'value'}) %}


답변

이 문제가 발생했지만 ‘요소’와 같은 연관 인덱스 대신 정수 인덱스를 만들려고했습니다.

()병합 필터를 사용 하여 색인 키를 보호해야합니다 .

{% set arr = arr|merge({ (loop.index0): 'value'}) %} 

이제 다음과 같은 사용자 지정 색인 키를 추가 할 수 있습니다. ('element'~loop.index0)


답변

초기화 만 필요한 경우 :

{% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %}


답변

@LivaX의 답변을 시도했지만 키가 숫자 인 배열을 병합하면 작동하지 않습니다 ( https://github.com/twigphp/Twig/issues/789 ).

키가 문자열 일 때만 작동합니다.

내가 한 일은 temp초기 테이블 ( t) 에서 다른 테이블 ( )을 다시 만들고 키를 문자열로 만드는 것입니다. 예를 들면 다음과 같습니다.

{% for key , value in t%}
{% set temp= temp|merge({(key~'_'):value}) %}
{% endfor %}

t 키 : 0, 1, 2 ..

temp 키 : 0_, 1_, 2_ ….


답변

{% set links = {} %}

{# Use our array to wrap up our links. #}
{% for item in items %}
  {% set links = links|merge({ (loop.index0) : {'url': item.content['#url'].getUri(), 'text': item.content['#title']} }) %}
{% endfor %}

{%
set linkList = {
  'title': label,
  'links': links
}
%}

{% include '<to twig file>/link-list.twig'%}

이 스레드에 감사드립니다. (loop.index0)으로 배열을 만들고 나뭇 가지로 보낼 수있었습니다.


답변

저는이 문제가 매우 성가신 문제를 발견했으며 제 해결책은 아마도 정통적이고 Twig 철학과 일치하지 않을 수도 있지만 다음을 개발했습니다.

$function = new Twig_Function('set_element', function ($data, $key, $value) {
    // Assign value to $data[$key]
    if (!is_array($data)) {
        return $data;
    }
    $data[$key] = $value;
    return $data;
});
$twig->addFunction($function);

다음과 같이 사용할 수 있습니다.

{% set arr = set_element (arr, ‘element’, ‘value’) %}


답변

다음과 같이 사용 {% set arr={'key':'value'} %}하십시오.: ). 잘 작동합니다.

그러나 for 루프 내에서 사용하여 배열로 만들면 for 범위 밖에서는 작동하지 않습니다.

{% for group in user.groups %}
  {% set foo={'loop.index0':'group.id'} %}
  {% set title={'loop.index0':'group.title'} %}
  {{ title }} //it work 
{% else %}
  {% set foo={'0':'-1'} %}
  {% set title={'0':'未分组'} %}
{% endfor %}
{{ title }}  //it does not work, saying title is not defined