首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >foreach循环中的php开关情况

foreach循环中的php开关情况
EN

Stack Overflow用户
提问于 2013-07-03 14:29:51
回答 3查看 3.5K关注 0票数 0

我正试图从目录中的文件列表中生成开关。

我有目录树

代码语言:javascript
复制
 ../pages/
          -home.php
          -about.php
          -service.php
          -contact.php

  ../system/
           -error404.php 

  -index.php
  -functions.php

我希望在open_page()函数functions.php中生成开关语句,以便将文件从页面包含到index.php中。

我需要在functions.php中生成这个函数:

代码语言:javascript
复制
open_page($page){

    switch ($page) {

        case '':        require_once("pages/home.php");    break;
        case 'home':    require_once("pages/home.php");    break;
        case 'about':   require_once("pages/about.php");   break;
        case 'service': require_once("pages/service.php"); break;
        case 'contact': require_once("pages/contact.php"); break;

    default: require_once("system/error404.php");          break;

    }
}

我的尝试:

代码语言:javascript
复制
//get all pages from dir PAGES
foreach (glob("pages/*.php") as $path) {

    $file = explode("/", $path);
    $filename = explode(".", $file[1]);

    $pages[] = $filename[0];
}

switch ($page) {
    case '': require_once("pages/home.php");
        break;

    foreach ($pages as $page){

        case '{$page}': require_once ("pages/"{$page}".php");
    }

    default: require_once("system/error404.php");
        break;
}

提前谢谢你。

编辑:

index.php

代码语言:javascript
复制
<?php
    include 'functions.php';
?>

<html>
    <body>

        <div id="menu">
            <a href=index.php?page=home>Home</a>
            <a href=index.php?page=about>About</a>
            <a href=index.php?page=service>Service</a>
            <a href=index.php?page=contact>Contact</a>
        </div>

        <div id="content">
            <?php
                open_page($_GET['page']);
            ?>
        </div>

    </body>
</html>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-03 14:38:05

这并不是关于如何在开关中执行循环的真正答案,但我相信您可以通过这样做来解决问题:检查文件是否存在。如果是的话,你就装。如果没有,则加载错误页。

代码语言:javascript
复制
function open_page($page = 'home') {
    if (empty($page)) {
        $page = 'home';
    }

    $file = "pages/{$page}.php"

    if (file_exists($file)) {
        require_once($file);
    } else {
        require_once("system/error404.php");
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-07-03 14:37:52

不需要开关。

代码语言:javascript
复制
if($page=='')
  $page = 'home';
$filename = "/path/to/{$page}.php";

if (file_exists($filename)) {
    require_once($filename);
} else {
    require_once("system/error404.php");
}
票数 1
EN

Stack Overflow用户

发布于 2013-07-03 14:40:27

对于switch块来说,逻辑是有缺陷的。

相反,你可以做这样的事情:

代码语言:javascript
复制
$page = basename($page);
if(empty($page)) {
  $page = "home";
}

if(file_exists("pages/{$page}.php")) {
  require_once("pages/{$page}.php");
else {
  require_once("pages/error404.php");
}

编辑:注意我是如何围绕$page变量使用basename的。这是相当重要的,这样您的$page就不能像../../some-other-file.php那样了。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17450781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档