programing

Twig에서 배열 설정 요소

copysource 2022. 10. 11. 22:43
반응형

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필터링을 실시합니다.하지만, 우리는 비밀번호를 삭제해야 합니다.이치노를 '보다 것'으로 이 아이디어입니다'라는 생각을 됩니다.data2번으로 하다할 때는 합니다.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

반응형