В PHP есть встроенная функция для замены цикла foreach? - PullRequest
0 голосов
/ 13 ноября 2018

Чтобы интегрировать иконки в панель навигации, я использую массивы key => value для хранения имени файла с тегом иконки. В панели навигации я использую цикл foreach для построения выпадающих меню или индексации в массив для отдельной ссылки. Это также позволяет очень легко динамически создавать и изменять выпадающие меню.

$homepage = array(
  'index.php'=>'<i class="fa fa-home"></i>'
);
$guestpages = array(
  'createaccount.php'=>'<i class="fa fa-university"></i>',
  'login.php'=>'<i class="fa fa-sign-in"></i>'
);
$logout = array(
  'logout.php'=>'<i class="fa fa-sign-out"></i>'
);
$pages = array($homepage,$guestpages,$logout);

Я также анализирую URL, чтобы определить, какую страницу просматривает клиент.

$pagename = basename($_SERVER['PHP_SELF']);

И чтобы связать проанализированный URL-адрес с соответствующим тегом значка из массива $ pages, я сейчас использую вложенный цикл foreach:

foreach ($pages as $pagearray) {
  foreach ($pagearray as $page => $icon) {
    if($pagename == $page) {
      $pageicon = $icon;
    }
  }
}

И вместо этого я хотел бы сделать что-то вроде этого:

$pageicon = $pages[?][$pagename];

Существует ли подобное альтернативное решение?

1 Ответ

0 голосов
/ 13 ноября 2018

Поскольку ваше имя страницы должно быть уникальным, вы можете построить свой массив в одном измерении, например:

$pages = [
    'index.php'=>'<i class="fa fa-home"></i>',
    'createaccount.php'=>'<i class="fa fa-university"></i>',
    'login.php'=>'<i class="fa fa-sign-in"></i>',
    'logout.php'=>'<i class="fa fa-sign-out"></i>',
];

Тогда просто используйте:

$icon = $pages[basename($_SERVER['PHP_SELF'])] ?? '<some default>';

[Изменить] Кроме того, вы можете использовать array_merge() для объединения ваших массивов:

$pages = array_merge($homepage, $guestpages, $logout);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...