2010-09-14 8 views
8

यहां एक अजीब सवाल है। मैं मैन्युअल रूप से वस्तुओं की एक सरणी का निर्माण कर रहा हूँ, इस तरह:सूचकांक संख्या निर्दिष्ट किए बिना PHP में ऑब्जेक्ट्स के सरणी कैसे बनाएं?

$pages_array[0]->slug = "index"; 
$pages_array[0]->title = "Site Index"; 
$pages_array[0]->template = "interior"; 

$pages_array[1]->slug = "a"; 
$pages_array[1]->title = "100% Wide (Layout A)"; 
$pages_array[1]->template = "interior"; 

$pages_array[2]->slug = "homepage"; 
$pages_array[2]->title = "Homepage"; 
$pages_array[2]->template = "homepage"; 

मुझे पसंद है कि यह कैसे एकदम स्पष्ट है, लेकिन क्योंकि मैं सूचकांक संख्या निर्दिष्ट करने की है, मैं उन्हें आसानी से पुन: व्यवस्थित नहीं कर सकते। इंडेक्स नंबर के बिना मैं इसे कैसे कर सकता हूं? संबंधित, ऐसा करने का एक बेहतर तरीका क्या है?

मैंने कक्षा बनाने के द्वारा इसे लिखने का भी प्रयास किया, और सरणी पर प्रत्येक स्थान को उस वर्ग के उदाहरण होने चाहिए। लेकिन चूंकि यह एक कॉन्फ़िगरेशन फ़ाइल है, इसलिए यह पढ़ना मुश्किल था और पता था कि किस पैरामीटर के साथ तर्क दिया गया था। यही कारण है कि मैंने उपरोक्त इस पुरानी स्कूल विधि को चुना है।

किसी भी विचार की बहुत सराहना की जाती है!

+0

* (sidenote) * PHP के पास ऑब्जेक्ट संग्रह को संग्रहीत करने के लिए मूल वर्ग है ['SplObjectStorage'] (http://de.php.net/manual/en/class.splobjectstorage.php)। यदि आपको किसी विशिष्ट क्रम में ऑब्जेक्ट्स की आवश्यकता है, तो ['SplMaxHeap'] (http://github.com/salathe/spl-examples/wiki/SplMaxHeap) – Gordon

+0

पर एक नज़र डालें, कृपया प्रश्न को साफ़ करें। आप "पुनर्व्यवस्थित" और सामान्य रूप से प्राप्त करने की क्या कोशिश कर रहे हैं? ऑब्जेक्ट कास्टिंग के लिए – Gordon

उत्तर

19

इस कोड

$pages_array[1]->slug = "a"; 

वैसे भी अमान्य है - अगर आप वस्तु उचित रूप से प्रारंभ नहीं है आप एक "सख्त" चेतावनी मिल जाएगा। तो अगर आप किसी भी तरह एक वस्तु का निर्माण करने के लिए है - या तो एक निर्माता के साथ:

$pages_array[] = new MyObject('index', 'title'....) 

या एक stdclass का उपयोग कर डाली

$pages_array[] = (object) array('slug' => 'xxx', 'title' => 'etc') 
+3

+1। मैं ऐसा करता हूं। –

+0

धन्यवाद @ user187291, ऑब्जेक्ट कास्टिंग मेरे लिए काम किया –

1

स्लग मान लिया जाये कि अनूठा होगा, शायद इसका इस्तेमाल अपने पृष्ठ सरणियों की पहचान के लिए:

$pages_array = array() ; 

$pages_array['index'] = array() ; 
$pages_array['index']['title'] = 'Site Index' ; 
$pages_array['index']['template'] = 'interior' ; 

$pages_array['a'] = array() ; 
$pages_array['a']['title'] = '100% Wide (Layout A)' ; 
$pages_array['a']['template'] = 'interior' ; 

आदि

आप बस अपनी स्लग मूल्य प्राप्त करने के सरणी कुंजी का उपयोग करने की आवश्यकता होगी।

4

आप उन्हें वस्तुओं नामित कुंजी के बजाय साथ सरणियों बनाने हैं, तो आप इसे इस तरह कर सकते हैं:

$pages_array = array(
    array(
     'slug' => 'index', 
     'title' => 'Site Index', 
     'template' => 'interior' 
    ), 

    array(
     'slug' => 'a', 
     'title' => '100% Wide (Layout A)', 
     'template' => 'interior' 
    ), 

    array(
     'slug' => 'homepage', 
     'title' => 'Homepage', 
     'template' => 'homepage' 
    ) 
); 

आप Fanis 'समाधान के साथ इस गठबंधन और यदि चाहें तो कुंजी के रूप में मल का उपयोग कर सकते हैं।

0

आप अनुक्रम अनुक्रमित बनाए रखने के लिए चाहते हैं। यह मदद मिलेगी।

$pages_array[]->slug = "index"; 
$key = array_search(end($pages_array),$pages_array); 
$pages_array[$key]->title = "Site Index"; 
$pages_array[$key]->template = "interior"; 

$pages_array[]->slug = "a"; 
$key = array_search(end($pages_array),$pages_array); 
$pages_array[$key]->title = "100% Wide (Layout A)"; 
$pages_array[$key]->template = "interior"; 

$pages_array[]->slug = "homepage"; 
$key = array_search(end($pages_array),$pages_array); 
$pages_array[$key]->title = "Homepage"; 
$pages_array[$key]->template = "homepage"; 

Check

2

मान लिया जाये कि आप किसी भी $pages_array तत्वों कहीं और स्थापित करने के लिए नहीं कर रहे हैं, आप एक सरल चर सेट कर सकते हैं।

$i = 0; 

$pages_array[$i]->slug = "index"; 
$pages_array[$i]->title = "Site Index"; 
$pages_array[$i]->template = "interior"; 
$i++; 

$pages_array[$i]->slug = "a"; 
$pages_array[$i]->title = "100% Wide (Layout A)"; 
$pages_array[$i]->template = "interior"; 
$i++; 

$pages_array[$i]->slug = "homepage"; 
$pages_array[$i]->title = "Homepage"; 
$pages_array[$i]->template = "homepage"; 
$i++; 

तुम बस $i हर बार बढ़ाने के लिए तो आप एक तत्व के ऊपर लिख नहीं है याद करने के लिए किया है।

+0

ये सभी भयानक विचार हैं, सभी को धन्यवाद! ऑब्जेक्ट कास्टिंग और इंडेक्स के लिए एक चर का उपयोग करना मेरी समस्या के लिए बहुत ही सरल, सरल समाधान हैं, बहुत सराहना की। – dylanized

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