Xakki
@Xakki
PHP-backendчик

Mustache — итерация по ассоциативному массиву

Данные
$data = array(
   'items' => array('елемент1', 'елемент2', 'елемент3', 'елемент4')
);


Шаблон
<ul>
{{#items}}
   <li> {{.}}
{{/items}}
<ul>


Результат
<ul>
   <li> елемент1
   <li> елемент2
   <li> елемент3
   <li> елемент4
<ul>


— тут всё понятно и это работает.

Но если у меня есть следующий массив
$data = array(
   'items' => array(
       'el1' => 'елемент1', 
       'el2' => 'елемент2', 
       'el3' => 'елемент3', 
       'el4' => 'елемент4', 
   )
);

Как в шаблоне вывести это дело (с помощью цикла конечно же) или почему так нельзя?
ПС / о лямбда функциях знаю, но рендер происходит на сервере.
  • Вопрос задан
  • 4013 просмотров
Пригласить эксперта
Ответы на вопрос 1
crackedmind
@crackedmind
web-developer
Не совсем хорошо знаю PHP. Поэтому покажу на JSON данных.

$data = array(
   'items' => array(
       'el1' => 'елемент1', 
       'el2' => 'елемент2', 
       'el3' => 'елемент3', 
       'el4' => 'елемент4', 
   )
);

Из этого, если я не ошибаюсь, получится вот такая JSON-структура

{
    "items": {
         "el1":"element1", "el2":"element2", "el3":"element3", "el4":"element4"
     }
}


А т.к. items — ассоциативный массив и mustache не умеет в цикле их обрабатывать. Для этого придется делать такой шаблон:
<ul>
{{#items}}
   {{#el1}}<li> {{el1}}{{/el1}}
   {{#el2}}<li> {{el2}}{{/el2}}
   {{#el3}}<li> {{el3}}{{/el3}}
   {{#el4}}<li> {{el4}}{{/el4}}
{{/items}}
<ul>

Что не очень то и гибко.

Лучше это все привести к такому виду.

{
    "items": [
         {"el":"element1"}, {"el":"element2"}, {"el3":"element3"}, {"el4":"element4"}
     ]
}

и такому шаблону

<ul>
{{#items}}
   {{#el}}<li> {{el}}{{/el}}
{{/items}}
<ul>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Искра Екатеринбург
от 80 000 до 100 000 ₽
Art gorka Санкт-Петербург
от 60 000 ₽
24 апр. 2024, в 19:40
5000 руб./за проект
24 апр. 2024, в 19:18
50000 руб./за проект
24 апр. 2024, в 19:05
15000 руб./за проект