2012-12-12 3 views
5

Это просто любопытный вопрос, рассуждения позади этого - это просто быть немного более ленивым с моей стороны. Вот что я имею в виду.Могут ли ключи PHP Array иметь псевдоним?

Скажем, у меня есть сайт, на котором htaccess делает хорошие URL-адреса и отправляет эти данные в массив $ _GET ['p'] в качестве текущей «страницы». В индексном файле я настраиваю страницу, и первое, что я делаю, - установить некоторые параметры страницы в файле конфигурации, $ _PAGE массиве. Теперь, скажем, у меня есть несколько страниц, на которых я хочу иметь одинаковые настройки (и на странице внизу могут измениться другие вещи, которые не соответствуют настройкам. В настоящее время у меня есть что-то похожее на следующие 2 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/']; 

Обратите внимание, что в конце OFTHE массива страницы, для того, чтобы «псевдоним» страница, которую я должен добавить это к концу после того, как массив создан.

есть ли способ в PHP, который может быть Я просто не знаю, что может сделать меня чуть-чуть лениво (и в то же время добавить к более чистому коду), и сделать так, чтобы я мог просто написать ключ? Я заметил, что следующее не работает, и я полагаю, что мой вопрос в том, есть ли способ создать псевдоним в пределах тот же массив при создании массива?

Этот пример deosn't работы:

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

Может быть, способ сослаться на "это" массив, внутри себя?

Если это невозможно, у меня нет проблемы с ответом «Невозможно». Хотя, если у вас есть лучший способ решения этого, другой, то, как я описал выше, ради того, чтобы быть более ленивым, мне было бы интересно его прочитать :)

+0

Короткий ответ, нет, не во время его создания, к сожалению. Позже да, как и вы, или даже со ссылками (так что изменения отражаются), но «источник» должен существовать и быть полностью инстанцированным до того, как это произойдет. Я не против видеть, что эти aliasses добавлены в конце, хотя есть что сказать, чтобы отличить «настоящие» страницы и алиасы. – Wrikken

ответ

1

Я не верю, что вы можете иметь значения массива которые отражают другие значения в массиве, подобные этому. Первый, что приходит на ум, хотя бы для вас, чтобы построить свой $_PAGE массив из в switch заявлении, используя значение от падения через как псевдонимы:

// 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

+0

Я должен был упомянуть в своем посте, что это был оригинальный способ сделать это. Проблема сводится к количеству страниц на этом 1 сайте, оператор switch становится большим и уродливым через некоторое время и где у меня есть мой массив страниц, находится в файле конфигурации в верхней части испытания, что позволяет мне сделать любые изменения (если мне нужно) в массив, прежде чем делать это там, где на самом деле собираются все наборы страниц. Во всяком случае, я ценю ваш ответ, хотел бы, чтобы я мог сделать неудачный тип сделки в массиве;) – 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); 

Используйте &, чтобы получить ссылку на (не объектную) переменную вместо ее значения.

+0

I не нужно ссылаться на фактический массив, мне нужно его псевдоним, так что определенные страницы начинаются с тех же настроек, что и другие. Эти страницы alias'd иногда меняют настройки очень немного, прежде чем они будут использоваться. Проблема в том, что я не хочу создавать 6 миллионов массивов, которые идентичны, за исключением небольших изменений.В настоящее время я настраиваю ключ «alias'd» таким образом, за исключением ссылок, я просто хочу быть ленивым и сказать, что переместите этот псевдонимы или «ссылочный» ключ непосредственно в инициализацию массива, поэтому мне не нужно прокручивать все путь к нижней части страницы каждый раз, когда хех. – NinjaKC

+0

все еще не понимает, какова актуальная проблема. – m02ph3u5

Смежные вопросы