Intereting Posts
Знание с помощью PHP, если браузер может воспроизводить аудиофайл с помощью тега html5 audio Как подсчитать красноречие отношения без проблемы N + 1 и загрузить всю модель? laravel 4 -> получить имена столбцов $ _REQUEST superarray не инициализируется в $ GLOBALS массиве magento процесс оплаты .. как это работает вообще mysql_connect возвращает «Не удается подключиться к локальному серверу MySQL через сокет» при удаленном соединении с хостом? mysql select query в массиве PHP 7, Symfony 3: Fatal error 1 абстрактный метод и поэтому должен быть объявлен абстрактным или реализовать остальные методы Включение CORS в приложении CakePHP PHP session_start сериализует и блокирует все остальные, использующие один и тот же сеанс Как реализовать собственный поставщик Faker в Laravel Проблемы с Force_download CodeIgniter () Хранение изображений в байтовых полях в базе данных PostgreSQL Используйте сеанс входа в Facebook на другой странице Что означает вызов функции-члена по логическому значению и как исправить

Элемент настройки массива от Twig

Как установить член уже существующего массива из Twig?

Я попытался сделать это следующим образом:

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

но я получил следующую ошибку:

Неожиданный токен "пунктуация" значения "[" ("конец блока блока" ожидается) в …

В Twig нет хорошего способа сделать это. Однако, используя фильтр слияния, можно:

 {% 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 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 not work, say title is not defined 

Спасибо за внимание. (плохой английский, извините!)

 {% 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) и отправить на веточку.

У меня был массив с несколькими измерениями. Единственное решение, которое я смог найти, – создать новый временный массив и обновить / добавить информацию, которая была передана другой функции твига.

Я пробовал ответить @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_ ….

Я нашел эту проблему очень раздражающей, и мое решение, возможно, является ортодоксальным и не связано с философией 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')%}