PHP数组键值可以有别名吗?

6
这只是一个好奇的问题,背后的原因纯粹是为了让我更懒一些。这里是我的意思...
假设我有一个网站,在htaccess中设置了漂亮的URL,并将该数据发送到$_GET['p']数组键作为当前“页面”。在索引文件中,我设置了页面,并且我首先在配置文件$_PAGE数组中设置了一些页面设置。现在,假设我有多个页面想要拥有相同的设置(并且在页面下方,其他事情可能会稍微改变,但与设置不对应)。所以目前,我有两个PHP文件,看起来像以下内容:
// index.php
include('page.array.php');

echo '<title>'.$_PAGE[$_GET['p']]['title'].'</title>';

// page.array.php
$_PAGE = array(
    'some/page/' => array(
        'title' => 'This is an example'
    )
)
$_PAGE['some/aliased/page/'] = $_PAGE['some/page/'];

请注意,在页面数组的末尾,为了“别名”一个页面,我必须在数组创建后添加这个东西到最后。
有没有PHP中的某种方法,也许是我不知道的,可以让我变得有点懒(同时增加清晰的代码),并使我可以简单地别名键? 我注意到以下内容不起作用,我想我的问题是,是否有任何方法可以在创建数组期间在同一数组中创建别名?
下面的示例无效:
// page.array.php
$_PAGE = array(
    'some/page/' => array(
        'title' => 'This is an example'
    ),
    'some/aliased/page/' => $_PAGE['some/page/']
)

也许有一种方式可以在数组内部引用“此”数组?
如果这不可能,我并不介意“不可能”的答案。不过,如果你有比我上述方法更好的解决办法,为了更懒,我会很感兴趣的 :)

简短回答是不行的,很遗憾在创建过程中无法实现。稍后可以像您所做的那样添加引用(以便反映更改),但必须存在并完全实例化“源”才能进行此操作。我不介意在末尾添加这些别名,因为它有助于区分“真实”页面和别名。 - Wrikken
2个回答

2

我不相信你可以像这样拥有镜像其他数组值的数组值。但首先想到的是,你可以在 switch 语句中构建你的 $_PAGE 数组,并使用 fall-through 值作为别名:

// Define path for testing, and empty page array
$path = "some/aliased/page";
$page = Array();

// Time to evaluate our path
switch ($path) {
    // If it's either of these two cases
    case "some/page":
    case "some/aliased/page":
        // Assign this array to $page
        $page = Array("Title" => "Two Paths, One Page.");
        break;
    // If it's this case
    case "some/other/path":
        // Assign this array to $page
        $page = Array("Title" => "Something else.");
        break;
    // If the path isn't found, default data
    default:
        $page = Array("Title" => "Page not found");
}

// Output the result
var_dump($page);

执行它:http://sandbox.onlinephpfunctions...ebd3dee1f37c5612c25


我应该在我的帖子中提到,这是最初的做法。问题在于这个网站上的页面数量很多,一段时间后,switch语句变得臃肿丑陋。而我的页面数组位于整个过程的顶部的配置文件中,这使我能够在将所有页面集实际传递之前对数组进行任何更改(如果需要的话)。无论如何,感谢您的回复,但愿我能在数组中实现一种类似于fall-through的交易方式;) - NinjaKC

1

这是可能的:

$_PAGE = array('some/page/' => array('title' => 'This is an example'));
$_PAGE['some/aliased/page/'] = &$_PAGE['some/page/'];
$_PAGE['some/page/'] = 7;
var_dump($_PAGE);

使用 & 来获取非对象变量的引用,而不是其值。


我不需要引用实际数组,我需要给它取一个别名,以便某些页面以与另一个页面相同的设置开始。这些带有别名的页面有时会在使用之前稍微更改设置。问题是,我不想创建600万个除了一些小变化外完全相同的数组。目前,我通过这种方式设置“别名”键,但不包括引用,我只是想偷懒并直接将该别名或“引用”的键移动到数组初始化中,这样我就不必每次都向下滚动到页面底部了。 - NinjaKC
仍然不明白实际问题是什么。 - m02ph3u5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接