Twig에서 배열 설정 요소
Twig에서 기존 어레이 멤버를 설정하려면 어떻게 해야 합니까?
다음 방법으로 시도했습니다.
{% set arr['element'] = 'value' %}
하지만 다음 오류가 발생했습니다.
값 ""("문 블록 끝")의 예기치 않은 토큰 "종료"가...에 있습니다.
트위그에서는 이것을 할 좋은 방법이 없다.다만, Marge 필터를 사용하면 가능합니다.
{% set arr = arr|merge({'element': 'value'}) %}
한다면element
변수는 괄호로 둘러싸십시오.
{% set arr = arr|merge({(element): 'value'}) %}
이 문제가 발생했지만 'element'와 같은 연관 인덱스 대신 정수 인덱스를 생성하려고 했습니다.
인덱스 키를 보호해야 합니다.()
병합 필터도 사용합니다.
{% set arr = arr|merge({ (loop.index0): 'value'}) %}
다음과 같은 사용자 지정 인덱스 키를 추가할 수 있습니다.('element'~loop.index0)
초기화가 필요한 경우:
{% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %}
다음 구문을 사용할 수도 있습니다.
{% set myArray = myArray + myArray2 %}
그냥 이걸 이렇게 쓰면{% set arr={'key':'value'} %}
(이후 공백 없음):
)는, 정상적으로 동작합니다.
단, 포루프 내에서 어레이를 사용하면 포루프 범위 밖에서는 동작하지 않습니다.
{% 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
@LivaX의 응답을 시도했지만 작동하지 않습니다.키가 숫자인 어레이를 Marge하면 동작하지 않습니다(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'%}
Thanks this thread - (loop.index0)를 사용하여 배열을 생성하여 twig로 전송할 수도 있었습니다.
저는 이 문제가 매우 성가시다고 느꼈고, 제 솔루션은 아마도 정통적이고 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_param(arr, 'set', 'value') %}
어레이를 갱신할 필요가 있는 경우에 대비하여 답변을 추가합니다.merge
기존 값을 변경할 수 있는 기능이 아니라 어레이 끝에 추가되기 때문에 작동하지 않습니다.
예를 들어 어레이가 있다고 칩시다.words_array
다음과 같습니다.
Object {
0: "First word"
1: "Second word"
2: "Third word"
}
갱신하려면"Second word"
다음 작업을 수행할 수 있습니다.
{% set words_array = {(1): 'New word'} + words_array %}
결과 어레이는 다음과 같습니다.
Object {
0: "First word"
1: "New word"
2: "Third word"
}
루프를 사용하고 있는 경우는, 한 걸음 더 나아가,loop.index0
다음과 같은 변수를 지정합니다.
{% for word in words_array %}
{% if word == 'Second word' %}
{% set words_array = {(loop.index0): 'New word'} + words_array %}
{% endif %}
{% endfor %}
다차원 배열이 있었어요새로운 임시 어레이를 생성하여 정보를 업데이트/추가하는 방법밖에 찾을 수 없었습니다.이 정보는 다른 twig 함수에 전달되었습니다.
얼마 전에 이런 문제가 있었어요.다음과 같은 배열이 있다고 가정해 보십시오.
data = {
'user': 'admin',
'password': 'admin1234',
'role': 'admin',
'group': 'root',
'profile': 'admin',
'control': 'all',
'level': 1,
'session': '#DFSFASADASD02',
'pre_oa': 'PRE-OA',
'hepa_oa': 'HEPA-OA',
'pre_ra': 'HEPA-RA',
'hepa_ra': 'HEPA-RA',
'deodor_ra': 'DEODOR-RA'
}
따라서 이 데이터를 두 줄로 표시하되 해당 목록에서 암호를 제거하십시오.하는 것은, 2개의 어레이로 할 수 .slice
필터링을 실시합니다.하지만, 우리는 비밀번호를 삭제해야 합니다.이치노를 '보다 것'으로 이 아이디어입니다'라는 생각을 됩니다.data
2번으로 하다할 때는 합니다.length
하려면 , 「유저」를 참조해 주세요.loop.index
마지막으로 왼쪽 또는 오른쪽 배열에 *관련 요소를 푸시합니다.는 2개의 으로 구성되어 .key
★★★★★★★★★★★★★★★★★」value
하려면 연산자 twit을 ()
는 ,을 사용합니다.merge
에 의해 .{% set left_list = left_list|merge({ (key): value }) %}
이것이 완전한 해결책입니다.
{% set left_list = {} %}
{% set right_list = {} %}
{% set limit = data|length // 2 %}
{% for key, value in data|cast_to_array %}
{% if key != 'password' %}
{% if loop.index <= limit %}
{% set left_list = left_list|merge({ (key): value }) %}
{% else %}
{% set right_list = right_list|merge({ (key): value }) %}
{% endif %}
{% endif %}
{% endfor %}
{% for key, value in left_list %}
<p>
<label for="{{key}}">{{key}}</label>
<input type="text" name="{{key}}" id="{{key}}" value="{{value}}"
class="text ui-widget-content ui-corner-all">
</p>
{% endfor %}
다음과 같이 어레이를 선언할 수 있습니다.
{% set arr = [{'element1': 'value1','element2' : 'value2'},{'element1': 'value1','element2' : 'value2'},{'element1': 'value1','element2' : 'value2'}] %}
언급URL : https://stackoverflow.com/questions/9432534/setting-element-of-array-from-twig
'programing' 카테고리의 다른 글
MySQL 사용자 이름과 비밀번호를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.11 |
---|---|
PHP에서 Microsoft로 인코딩된 따옴표를 대체하는 방법 (0) | 2022.10.11 |
MariaDB 홈브루 설치 오류 (0) | 2022.10.11 |
Kotlin의 Java static final 필드에 해당하는 것은 무엇입니까? (0) | 2022.10.11 |
시간 초과와 함께 모듈 '하위 프로세스' 사용 (0) | 2022.10.11 |