Панель навигации с многомерным массивом

#php #twig

#php #twig

Вопрос:

navbar.html.twig

 <ul class="navbar-nav mr-auto">
{% for Links, Item in menu %}
    <li class="nav-item">
    <a class="nav-link" href="{{ Links }}">{{ Item }}
    </a>
  </li>
{% endfor %}
 </ul>
 

server.php

 $menu = [
  "Items" => array("Home", "Woman's Fashion", "Men's Fashion", "Accessories"),
  "Links" => array("/homepage", "/woman", "/men", "/accessories")
 ];


$params = [
  "name" => "Mr. Gadget",
  "title" => SITE_TITLE,
  "SITE_TITLE" => SITE_TITLE,
  "user" => "myName",
  "menu" => $menu
];

echo $twig->render('views/navbar.html.twig', $params);
 

Это генерирует вывод

 <ul class="navbar-nav mr-auto">
  <li class="nav-item">
        <a class="nav-link" href="Items">Array
    </a>
  </li>
    <li class="nav-item">
        <a class="nav-link" href="Links">Array
    </a>
  </li>
</ul>
 

Итак, что я пытаюсь сделать, это в основном сгенерировать ссылку и имя для каждого пункта меню через массив

Я также попытался поместить цикл for в цикл for, который создает 8 разных элементов вместо 4. Как я могу получить имя и ссылку в общем количестве элементов?

Комментарии:

1. Я считаю, что вы должны подготовить свои данные для структурирования так, как вам нужно, прежде чем передавать их в шаблон. Чем меньше логики вам нужно сделать в шаблоне, тем лучше. Так что, возможно, один массив с именами в качестве ключей и ссылками в качестве значений.

Ответ №1:

Вы можете выполнить итерацию menu.Items или menu.Links и использовать ключ массива, чтобы выбрать запись из другого массива следующим образом

 <ul class="navbar-nav mr-auto">
    {% for key, Item in menu.Items %}
        <li class="nav-item">
            <a class="nav-link" href="{{ menu.Links[key] }}">{{ Item }}
            </a>
        </li>
    {% endfor %}
</ul>
 

рабочий пример