我使用PHP Switch语句确定我的网站页面。所以这是一个例子:
switch($page) {
case "about":
$title_name = "About Us";
$page_content = "includes/about-us.php";
include("inner.php");
break;
case "services":
$title_name = "Services";
$page_content = "includes/services.php";
include("inner.php");
break;
}
而且我的文件结构是index.php?page = about,它使用htaccess转换为/ about /。
[我想做的是将我所有的页面放在该switch语句中,并自动将其抓取并放入列表中,这样我就可以自动将其写入到我的页脚页面中,在那里我将拥有所有链接。
因此,而不是像下面这样手动键入页脚中的所有链接:首页|关于我们|服务| FAQ,它将根据我在Switch语句中提供的页面自动将其拉出。
有没有办法做到这一点?自动添加新页面并为新页面添加新案例,并在includes文件夹中自动创建页面也将是一件好事。
[如果有人能指出正确的方向,我将非常感激。根据我的理解,我不相信您可以使用switch语句来做到这一点,我将不得不重新调用页面的方式,对吧?
不,不能使用switch
-但您可以将这些信息存储在数组中:
$page_list = array(
'about' => array(
'title' => 'About Us',
'content' => 'includes/about-us.php',
),
'services' => array(
'title' => 'Services',
'content' => 'includes/services.php',
),
);
if(isset($page_list[$page])) {
$page_info = $page_list[$page];
$title_name = $page_info['title'];
$page_content = $page_info['content'];
include("inner.php");
} else {
// 404 - file not found
}
// create links
foreach($page_list as $link_name => $page_ent) {
echo "<a href=\"/{$link_name}/\">{$page_ent['title']}</a><br />"
}
// output
// <a href="/about/">About Us</a><br />
// <a href="/services/">Services</a><br />
$pages = array('about'=> 'About Us', 'services' => 'Services');
if (array_key_exists($page, $pages)) {
$title_name = $pages[$page];
$page_content = "includes/$page.php";
include('inner.php');
}
对于您的页脚,您可以仅迭代页面列表。要添加新页面,只需将其添加到数组中并创建相应的文件。
但是要回答您的问题:不,您不能在运行时分析代码语句。
您有这个倒退。您想要的是拥有一组页面数组,然后在其上循环一次以获取switch语句,并一次遍历至页脚。或者,更好的是,完全摆脱switch语句,而使用关联数组映射页面到构建该特定页面可能需要的信息(这些开关之间有很多共同的行为,因此知道您的页面是什么,可以从中构造适当的URL /等)。
您肯定无法从switch语句中获取所有值,您将不得不重新设计代码。当然,有很多方法可以实现这一目标,但是我通常会像下面这样做,它比您的方法更短,更容易扩展。
<?php
$pages = array('home', 'about', 'services', 'faq');
$titles = array('Home', 'About us', 'Services', 'FAQ');
$index = array_search($_POST['p'], $pages);
if ($index !== false) {
$page_content = 'includes/' . $pages[$index] . '.php';
$title_name = $titles[$index];
} else {
print 'Page not found';
}
?>
希望这有所帮助。
可能迟到了聚会,但是当我自己正在寻找答案时,我发现了这个问题,所以我必须建立自己的解决方案。
我的用例是,我有一个Telegram机器人,当从特定帐户接收用户输入时,该机器人会执行多个动作,每个动作都不同。
命令字符串是预先确定的,所以我有一系列类似的情况:
switch(strtolower($text)) { case "blah1": dosomething1(); break; case "blah2": file_put_contents($somefile,2); break; case "blah3": echo file_get_contents($someurl); break; // [...] }
我正在添加功能最不相同的新命令,通常我会忘记机器人可以执行的所有操作,因此我想实现一个功能,其中机器人在响应某个命令时会列出所有其他可能的命令(如果可能,可以使用
--help
排序功能。)>所以,我知道这很丑陋,您需要精确设置代码格式,但这对我有用:
preg_match_all('/case \\"([a-z0-9\\s]+)\\"/', file_get_contents(__FILE__), $matches);