我不知道如何简化我的问题,我试着用一些细节来解释我的问题。如何将我的一个数组更改为二维或多维数组(示例在底部),检查数组中的一个变量(等于当前类别)和另一个变量(等于当前页面),并检查页面是否属于类别?
工作代码:
我有以下工作代码,它允许我获取即将开启的页面并显示正确的内容(通过包含,这里没有显示)。
$path = '';
$category = $_GET['category'];
$page = $_GET['page'];
$content = array('home','about','work','contact','404','team','services');
if (!empty($page)) {
if(in_array($page,$content)) {
if (!empty($category)) {
$path = $category . '/' . $category . '_' . $page;
} else {
$path = 'content_' . $page;
}
}else {
$page = '404';
$url = '/' . $page;
header('Location: ' . $url, true, 404); exit();
}
}
else {
$page = 'home';
$path = 'content_' . $page;
}
我的问题:
我的问题是检查数组$page
中是否找到$content
。
我需要做这样的事情:
$main = array('home','about','work','contact','404');
$secondary = array('team','services');
...然后在此:
if (in_array($category,$main) && in_array($page,$secondary)) {
$path = $category . '/' . $category . '_' . $page;
}
即使这样有效仍然存在缺陷。如果$category == $main
和$page == $secondary
但$secondary
与当前类别下的页面不相等,则该页面仍然会打开但不会出现任何内容,因为它实际上并不存在。
$category == $main
和$page == $secondary
,$category
为/about
且$page
为/team
,则结果为网址{{1}这是正确的。/about/team
为$category
且/about
为$page
,根据代码,结果在技术上也是正确的,但网址为/contact
会显示一个空白页面。我的想法:
我认为二维数组更好?这就是我被困的地方!
这样的事情:
/about/contact
或者这个:
$content = array(
array('Home'),
array('About','Team','Services'),
array('Work'),
array('Contact','Quote','Support'),
array('404')
);
如果您需要我的更多信息,请询问。所有的帮助表示赞赏,最好的方法是什么,如果你能让我开始走上正确的道路,我将不胜感激!
$main = array('home','about','work','contact','404');
$secondary = array(
array('About','Team','Services'),
array('Contact','Quote','Support')
);
答案 0 :(得分:1)
是的,你可以使用二维数组。解决问题的关键是认识到PHP支持关联数组 - 类似于Python的Dictionary
或Java的Map
(不同于Map
,PHP的数组不受类型限制)。
从本质上讲,如果您愿意,可以为每个数组条目分配$key => $value
配对。现在停止阅读并思考如何用这些知识解决问题。如果你能得到它,真棒;如果没有,继续前进!
因此我们要设置一个数组,其中$key
是允许的类别名称,$value
是该类别允许的页面集(子数组)。这是看起来的样子(尝试在WriteCodeOnline上运行此代码):
function getUrl($category, $page) {
$pages = array(
'home',
'about' => array('team', 'services'),
'work',
'contact' => array('quote', 'support'),
'404'
);
if (!is_null($category)) {
if(array_key_exists($category, $pages) && in_array($page, $pages[$category])) {
return $category . '/' . $category . '_' . $page;
}
// Category doesn't exist or page for category not found
return '404';
} else if (in_array($page, $pages)) {
return 'content_' . $page;
}
return '404';
}
// Expected url: 'about/about_team'
var_dump(getUrl('about', 'team'));
// Expected url: 'contact/contact_quote'
var_dump(getUrl('contact', 'quote'));
// Expected url: 'content_home' - Page 'home' exists without category as a page
var_dump(getUrl(null, 'home'));
// Expected url: '404' - Page 'home' of category 'contact' does not exist.
var_dump(getUrl('contact', 'home'));
// Expected url: '404' - Page 'notexist' of category 'contact' does not exist.
var_dump(getUrl('contact', 'notexist'));
因此,您可以看到$category = 'about'
和$page = 'team'
指向现有网页...
$category = 'about'
和$page = 'contact'
不会。