PHP:如何在动态布局中使用多维数组等变量?

时间:2014-12-18 01:16:18

标签: php arrays

我不知道如何简化我的问题,我试着用一些细节来解释我的问题。如何将我的一个数组更改为二维或多维数组(示例在底部),检查数组中的一个变量(等于当前类别)和另一个变量(等于当前页面),并检查页面是否属于类别?


工作代码:

我有以下工作代码,它允许我获取即将开启的页面并显示正确的内容(通过包含,这里没有显示)。

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

1 个答案:

答案 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'不会。

请参阅:http://php.net/array_key_exists

请参阅:http://php.net/in_array