【问题标题】:In PHP is there a built-in function to replace this foreach loop?在 PHP 中是否有一个内置函数来替换这个 foreach 循环?
【发布时间】:2018-11-13 01:38:39
【问题描述】:

为了将图标集成到导航栏中,我使用 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];

是否存在类似的替代解决方案?

【问题讨论】:

  • 为什么是三个独立的数组?如果你只有$pages = ['index.php' =&gt; ...],你可以简单地做$pages[basename($_SERVER['PHP_SELF'])]

标签: php arrays loops


【解决方案1】:

由于您的页面名称必须是唯一的,您可以在一个维度中构建您的数组,如下所示:

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

【讨论】:

  • 这会使导航栏结构复杂化,因为 index.php 和 logout.php 是单独的链接,而 createaccount.php 和 login.php 都在同一个下拉菜单中。因此,在导航栏上,我使用了一个循环:foreach($guestpages as...) 来构建下拉菜单,其中包含指向 createaccount.php 和 login.php 的链接。我将无法从 $pages 数组创建单独的下拉菜单,并且不想维护一个单独的未嵌套的 $pages 数组。
  • 那么就用array_merge()把它们组合起来。
猜你喜欢
  • 1970-01-01
  • 2011-07-16
  • 2016-11-08
  • 2020-12-15
  • 2018-06-02
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多