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