2012-12-12 13 views
5

To tylko ciekawa kwestia, rozumowanie za nią jest po prostu nieco leniwy z mojej strony. Oto co mam na myśli ..Czy klucze tablic PHP mogą mieć alias?

Załóżmy, że mam stronę internetową, gdzie htaccess tworzy ładne adresy URL i wysyła te dane do klucza tablicy $ _GET ['p'] jako bieżącej "strony". W pliku indeksu ustawiam stronę, a pierwszą rzeczą jaką zrobię jest ustawienie niektórych ustawień strony w pliku konfiguracyjnym, tablicy $ _PAGE. Teraz powiedzmy, że mam wiele stron Chcę mieć te same ustawienia (i na dole strony, inne rzeczy mogą się nieznacznie zmienić, które nie odpowiadają ustawieniom.) Tak więc obecnie mam coś, co wygląda jak te 2 pliki 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/']; 

Zauważ, że na końcu ofthe stronie tablicy, w celu „alias” a strona muszę dodać to do końca po tablica została utworzona.

Czy istnieje sposób w PHP, który może Jestem po prostu nieświadomy, że mógłbym uczynić mnie odrobinę leniwszym (i jednocześnie dodać do czystszego kodu), i sprawić, żebym mógł po prostu alias klucza? Zauważyłem, że poniższe nie działa, i przypuszczam, że mój pytanie brzmi, czy istnieje sposób na stworzenie aliasu w ta sama tablica podczas tworzenia tablicy?

Ten przykład deosn't praca:

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

Może to sposób odnieść się do "tego" tablicy od wewnątrz siebie?

Jeśli nie jest to możliwe, nie mam problemu z odpowiedzią "Nie można". Chociaż, jeśli masz lepszą metodę rozwiązania tego problemu, inne niż opisałem powyżej, w trosce o leniwość, byłbym zainteresowany przeczytaniem go :)

+0

Krótka odpowiedź, nie, nie podczas jej tworzenia niestety. Później tak, tak jak Ty, lub nawet z referencjami (więc zmiany są odzwierciedlane), ale "źródło" musi istnieć i być w pełni utworzone, zanim to się stanie. Nie mam nic przeciwko temu, że widzę te aliasy dodane na końcu, ale jest coś do powiedzenia, żeby odróżnić "prawdziwe" strony i aliasy. – Wrikken

Odpowiedz

1

Nie wierzę, że możesz mieć wartości tablicowe które odzwierciedlają inne wartości w tablicy w ten sposób. Pierwszą rzeczą, która przychodzi do głowy, chociaż byłoby, aby zbudować swoją tablicę $_PAGE od wewnątrz switch rachunku, przy użyciu wartości jesień-through jako aliasy:

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

wykonać go: http://sandbox.onlinephpfunctions...ebd3dee1f37c5612c25

+0

Powinienem wspomnieć w moim poście, że był to oryginalny sposób robienia tego. Problem sprowadza się do ilości stron w tej witrynie, instrukcja switch staje się duża i brzydka po jakimś czasie, a gdzie mam tablicę stron, znajduje się w pliku konfiguracyjnym na górze próby, co pozwala mi zrobić wszelkie zmiany (jeśli zajdzie taka potrzeba) do tablicy, zanim przejdę do miejsca, w którym faktycznie zmierzą się wszystkie zestawy stron. W każdym razie, doceniam twoją odpowiedź, życzę sobie, abym mogła wykonać transakcję typu fall-through w tablicy;) – NinjaKC

1

To możliwe:

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

Użyj &, aby uzyskać odniesienie do (nieobiektowej) zmiennej zamiast jej wartości.

+0

nie trzeba odwoływać się do rzeczywistej tablicy, muszę ją aliasować, aby określone strony zaczynały się od tych samych ustawień, co inne. Te alias'd strony czasami zmieniają ustawienia bardzo nieznacznie, zanim zostaną użyte. Problem polega na tym, że nie chcę tworzyć 6 milionów tablic identycznych z wyjątkiem niewielkich zmian.Obecnie ustawiam "alias'd" w ten sposób, pomijając odniesienie, po prostu chcę być leniwy i powiedzieć, przenieść alias lub "odwołanie" klucz bezpośrednio do inicjalizacji macierzy, więc nie muszę przewijać wszystkich sposób na dole strony za każdym razem heh. – NinjaKC

+0

nadal nie otrzymuje rzeczywistego problemu – m02ph3u5

Powiązane problemy