2012-12-12 15 views
5

यह सिर्फ एक उत्सुक सवाल है, इसके पीछे तर्क पूरी तरह से मेरे हिस्से पर थोड़ा अधिक आलसी होना है। यहां मेरा मतलब है ..क्या PHP ऐरे कुंजी के पास उपनाम हो सकता है?

कहें कि मेरे पास एक वेबसाइट है, जहां htaccess अच्छा यूआरएल बनाता है, और उस डेटा को $ _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

दुर्भाग्यवश दुर्भाग्यवश के दौरान नहीं, संक्षिप्त उत्तर, नहीं। बाद में हां, जैसे आप करते हैं, या यहां तक ​​कि संदर्भों के साथ (इसलिए परिवर्तन प्रतिबिंबित होते हैं), लेकिन 'स्रोत' मौजूद होना चाहिए और ऐसा होने से पहले पूरी तरह से तत्काल होना चाहिए। मुझे अंत में जोड़े गए उन उपनामों को देखने में कोई फर्क नहीं पड़ता, हालांकि, 'वास्तविक' पृष्ठों और उपनामों को अलग करने के लिए कुछ कहना है। – Wrikken

उत्तर

1

मुझे विश्वास नहीं है कि आपके पास सरणी मूल्य हो सकते हैं जो इस तरह सरणी में अन्य मानों को दर्पण करता है।

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

मुझे अपनी पोस्ट में उल्लेख किया जाना चाहिए था, कि यह करने का यह मूल तरीका था। यह समस्या इस साइट पर पृष्ठों की मात्रा के लिए नीचे आती है, कुछ समय बाद एक स्विच स्टेटमेंट बड़ा हो जाता है और बदसूरत हो जाता है, और जहां मेरा पृष्ठ सरणी है, वह परीक्षा के शीर्ष पर कॉन्फ़िगरेशन फ़ाइल में है, यह मुझे बनाने की इजाजत देता है सभी पेज के सेट वास्तव में कहां जा रहे हैं, इसे बनाने से पहले किसी भी बदलाव (यदि मुझे इसकी आवश्यकता है) .. वैसे भी, मैं आपके जवाब की सराहना करता हूं, इच्छा है कि मैं एक सरणी में गिरावट के माध्यम से एक प्रकार का सौदा कर सकता हूं;) – NinjaKC

1

यह संभव है:

पहली बात यह है कि मन में आता है कि आप एक switch बयान के भीतर से अपने $_PAGE सरणी का निर्माण करने के लिए, उपनाम के रूप में गिरावट के माध्यम से मानों का उपयोग किया जाएगा
$_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 वास्तविक सरणी को संदर्भित करने की आवश्यकता नहीं है, मुझे इसे उपनाम करने की आवश्यकता है, ताकि कुछ पेज एक ही सेटिंग के साथ दूसरे सेटिंग्स के साथ शुरू हो जाएं। वे उपनाम पृष्ठ कभी-कभी उपयोग किए जाने से पहले सेटिंग्स को बहुत कम बदलते हैं। मुद्दा यह है कि, मैं 6 मिलियन सरणी नहीं बनाना चाहता जो कि छोटे बदलावों को छोड़कर समान हैं।वर्तमान में, मैंने इस तरीके से "alias'd" कुंजी सेट की है, संदर्भ के मुकाबले, मैं सिर्फ आलसी होना चाहता हूं और कहता हूं कि एलीएड या "संदर्भित" कुंजी सीधे सरणी प्रारंभ में है, इसलिए मुझे सभी को स्क्रॉल करने की आवश्यकता नहीं है पेज के निचले हिस्से में हर बार हेहे। – NinjaKC

+0

अभी भी वास्तविक समस्या नहीं है – m02ph3u5

संबंधित मुद्दे