在PHP中是否有内置函数替换此foreach循环?

时间:2018-11-13 01:38:40

标签: php arrays loops

为了将图标集成到导航栏中,我使用key => value数组来存储带有icon标记的文件名。在导航栏中,我使用一个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 :(得分:3)

由于页面名必须唯一,因此可以在一个维度上构建数组,如下所示:

$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);