PHP में आरंभीकृत (खाली) सरणी के लिए सबसे अच्छा तरीका है


297

कुछ अन्य भाषाओं में (उदाहरण के लिए AS3), यह नोट किया गया है कि ऑब्जेक्ट के निर्माण और तात्कालिकता के कारणों के var foo = []बजाय इस तरह से किए जाने पर एक नई सरणी को प्रारंभ करना तेज var foo = new Array()है। मुझे आश्चर्य है कि क्या PHP में कोई समानता है?

class Foo {
    private $arr = array(); // is there another / better way?
}

11
यही सब मैं कभी करता हूं।
मैथ्यू

2
सभी को धन्यवाद जिन्होंने उत्तर दिया (और इतनी जल्दी!)। मुझे मनमाने ढंग से एक उत्तर का चयन करना था इसलिए एंडी को सबसे अधिक गहराई से लग रहा था।
टॉम ऑगर

1
यह सवाल बहुत मदद करता है
हितेश

कोशिश करो array_fill? php.net/manual/en/function.array-fill.php
zx1986

2
@ zx1986 एक खाली सरणी बनाने का एक सुंदर बोझिल तरीका है। निश्चित रूप से ओपी से कम $arr = array()या$arr = []
टॉम ऑगर

जवाबों:


189

ECMAScript कार्यान्वयन में (उदाहरण के लिए, ActionScript या JavaScript), Array()एक रचनाकार फ़ंक्शन है और []सरणी शाब्दिक व्याकरण का हिस्सा है। दोनों को पूरी तरह से अलग-अलग तरीकों से अनुकूलित और निष्पादित किया जाता है, जिसमें शाब्दिक व्याकरण को एक फ़ंक्शन को कॉल करने के ओवरहेड द्वारा dogged नहीं किया जाता है।

दूसरी ओर, PHP में भाषा के निर्माण होते हैं जो कार्यों की तरह दिख सकते हैं लेकिन इन्हें ऐसे नहीं माना जाता है। PHP 5.4 के साथ भी, जो []एक विकल्प के रूप में समर्थन करता है , ओवरहेड में कोई अंतर नहीं है, क्योंकि जहां तक ​​कंपाइलर / पार्सर का संबंध है, वे पूरी तरह से पर्याय हैं।

// Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

यदि आपको PHP के पुराने संस्करणों का समर्थन करने की आवश्यकता है, तो पूर्व सिंटैक्स का उपयोग करें। पठनीयता के लिए एक तर्क भी है लेकिन, एक लंबे समय तक जेएस डेवलपर होने के नाते, उत्तरार्द्ध मुझे स्वाभाविक लगता है। []जब मैं पहली बार PHP सीख रहा था, तब मैंने वास्तव में सरणियों को शुरू करने की कोशिश करने की गलती की थी।

मूल कारणों से बहुसंख्यक वोटर्स द्वारा निम्न कारण से भाषा में यह परिवर्तन मूल रूप से प्रस्तावित और अस्वीकार किया गया था:

यह पैच स्वीकार नहीं किया जाएगा क्योंकि मूल डेवलपर्स के मामूली बहुमत के खिलाफ मतदान किया। हालांकि अगर आप कोर डेवलपर्स और यूजरलैंड वोटों के बीच एक संचित मतलब निकालते हैं, तो ऐसा लगता है कि इसके विपरीत पैच डायन को समर्थन या लंबे समय में बनाए रखा नहीं है।

हालाँकि, ऐसा प्रतीत होता है कि हृदय का परिवर्तन 5.4 तक हुआ था, जो संभवतः मोंगोडीबी जैसे लोकप्रिय डेटाबेस (जो ECMAScript सिंटैक्स का उपयोग करते हैं) के समर्थन के कार्यान्वयन से प्रभावित है।


51
संभवतः 5.4 परिवर्तन किया गया था क्योंकि जो लोग "जो" मतदान प्रक्रिया
Rob Grant

40
मैं पसंद $array = [];करता हूं क्योंकि यह JS और PHP के बीच आगे और पीछे आसान बनाता है।
जस्टिन

तो $array = []; बेहतर विकल्प है ??? या क्या मुझे एक कोशिश करनी चाहिए कौन सा बेहतर है
हितेश

2
@ हितेश: यह व्यक्तिगत पसंद की बात है। वे दोनों बिल्कुल समान रूप से कार्यात्मक हैं, []बस टाइप करना थोड़ा आसान है।
एंडी ई

7
[] वाक्यविन्यास को सार्वभौमिक रूप से पसंद किया जाता है, लेकिन यह ध्यान रखना महत्वपूर्ण है कि बड़ी संख्या में मेजबान अभी भी 5.3 का विशेष रूप से उपयोग कर रहे हैं। यदि आप अपना कोड वितरित करना चाहते हैं, तो [] सिंटैक्स घातक होगा।
आदि

204
$myArray = []; 

खाली सरणी बनाता है।

आप मान को बाद में सरणी पर धकेल सकते हैं, जैसे:

$myArray[] = "tree";
$myArray[] = "house";
$myArray[] = "dog";

इस बिंदु पर, $ myArray में "ट्री", "हाउस" और "डॉग" शामिल हैं। उपरोक्त आदेशों में से प्रत्येक सरणी पर निर्भर करता है, उन वस्तुओं को संरक्षित करना जो पहले से ही वहां थे।

अन्य भाषाओं से आने के बाद, एक सरणी में जोड़ने का यह तरीका मुझे अजीब लगा। मुझे उम्मीद है कि $ myArray + = "डॉग" या कुछ और ... या शायद "ऐड ()" जैसी विधि विजुअल बेसिक संग्रह की तरह है। लेकिन यह प्रत्यक्ष परिशिष्ट वाक्यविन्यास निश्चित रूप से छोटा और सुविधाजनक है।

आपको वास्तव में आइटम निकालने के लिए unset () फ़ंक्शन का उपयोग करना होगा:

unset($myArray[1]); 

... सरणी से "घर" हटा देगा (सरणियां शून्य-आधारित हैं)।

unset($myArray); 

... पूरी सरणी को नष्ट कर देगा।

स्पष्ट होने के लिए, किसी सरणी में शामिल होने के लिए खाली वर्ग कोष्ठक वाक्यविन्यास केवल अनुक्रमणिका को निर्दिष्ट करने के बजाय, प्रत्येक मान को अनुक्रमणिका को स्वचालित रूप से निर्दिष्ट करने के लिए PHP को बताने का एक तरीका है। कवर के तहत, PHP वास्तव में यह कर रहा है:

$myArray[0] = "tree";
$myArray[1] = "house";
$myArray[2] = "dog";

आप अपने आप को अनुक्रमित कर सकते हैं यदि आप चाहें, और आप अपने इच्छित संख्याओं का उपयोग कर सकते हैं। आप कुछ वस्तुओं को इंडेक्स नंबर भी दे सकते हैं और दूसरों को नहीं। यदि आप ऐसा करते हैं, तो PHP लापता अनुक्रमणिका संख्याओं को भर देगा, जो कि जाते हुए सबसे बड़ी अनुक्रमणिका संख्या से बढ़ा हुआ है।

तो अगर आप ऐसा करते हैं:

$myArray[10] = "tree";
$myArray[20] = "house";
$myArray[] = "dog";

... आइटम "डॉग" को 21 का एक इंडेक्स नंबर दिया जाएगा। PHP वृद्धिशील सूचकांक असाइनमेंट के लिए बुद्धिमान पैटर्न मिलान नहीं करता है, इसलिए यह नहीं पता होगा कि आप चाहते थे कि यह 30 के इंडेक्स को "कुत्ते" को असाइन करे। "। आप किसी सरणी के लिए वेतन वृद्धि पैटर्न को निर्दिष्ट करने के लिए अन्य कार्यों का उपयोग कर सकते हैं। मैं यहां नहीं जाऊंगा, लेकिन इसके सभी PHP डॉक्स में।

चीयर्स,

- = कैमरून


6
यह ध्यान रखना महत्वपूर्ण है कि $ ary = [] केवल PHP 5.4 पोस्ट करता है। प्रदर्शन के दृष्टिकोण से हालांकि [] बनाम सरणी () के लिए कोई लाभ नहीं है।
टॉम ऑस्टर

1
पहले के संस्करणों के लिए आप array_push () w3schools.com/php/func_array_push.asp का उपयोग कर सकते हैं। मुझे नहीं पता कि इससे जुड़ा कोई प्रदर्शन हिट है या नहीं।
मार्क

3
आपने @ TomAuger की बात @Mark समझ ली। $array[] = 'foo'PHP के पुराने संस्करणों में ठीक काम करता है। यह केवल $array = [];एक सरणी को आरम्भ करने के लिए है जो 5.4 में नया है।
कोडमेकिन

निष्पक्ष होने के लिए, यह वास्तव में ओपी के सवाल का जवाब देता है।
Smitty

lol ... मन उड़ गया। PHP के दशक और मैं अभी सीख रहा हूँ आपको array_push की आवश्यकता नहीं है।
बैंकाकियन


26

PHP में एक सरणी एक सरणी है; कोई आदिम बनाम वस्तु विचार नहीं है, इसलिए होने के लिए कोई तुलनीय अनुकूलन नहीं है।


1
सबसे अच्छा जवाब IMO: अलग-अलग वाक्यविन्यास हैं, लेकिन प्रदर्शन के संबंध में वे सभी समान हैं।
मैथ्यू नपोली

1
क्या दोनों के लिए प्रदर्शन की समस्या शामिल है .. क्या मैं इस बारे में जांच कर सकता हूं .. किसी भी लिंक या डॉक्टर
हितेश

2
नतीजतन, जब तक आपको यकीन नहीं होता कि आपका कोड प्री 5.4 वातावरण में कभी नहीं चलेगा, $ array = new array () का उपयोग करें
Tom Auger

20

आप जो कर रहे हैं वह 100% सही है।

अच्छा नामकरण के संदर्भ में, यह अक्सर ऐसा होता है कि निजी / संरक्षित संपत्तियों को एक अंडरस्कोर के साथ पूर्व कर दिया जाता है ताकि यह स्पष्ट हो सके कि वे सार्वजनिक नहीं हैं। जैसे private $_arr = array()याpublic $arr = array()


2
Php में, मुझे लगता है कि उन्हें अंडरस्कोर के साथ नाम देना बेहतर नहीं है क्योंकि आप हमेशा $thisमूल्य प्राप्त करने के लिए उपयोग करते हैं और कभी भी सार्वजनिक गुणों का उपयोग नहीं करना चाहिए।
meze

1
@meze आप उनकी तरह का उपयोग होता है $this->arrऔर $this->_arr। आपको सार्वजनिक संपत्तियों का उपयोग क्यों नहीं करना चाहिए ?!
जेम्स सी

5

इसे इस्तेमाल करे:

    $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }

4
किन्दा कूल, लेकिन वास्तव में उपयोगी कोडिंग पैटर्न की तुलना में पार्टी चाल के रूप में अधिक, आपको नहीं लगता?
टॉम ऑगर

उपयोगी हो सकता है यदि आप गुण सरणी के साथ किसी ऑब्जेक्ट में अपना सरणी बनाना चाहते हैं और इसे अंत में सरणी में परिवर्तित कर सकते हैं।
जोमार सेविजो

4

नहीं है कोई दूसरा रास्ता तो यह सबसे अच्छा है,।

संपादित करें: यह उत्तर PHP 5.4 और उच्चतर के बाद से मान्य नहीं है।


यह अब मामला नहीं है, 5.4 ने सरणियों के लिए शॉर्टहैंड सिंटैक्स पेश किया।
एंडी ई

13
@Motes क्यों इतना नफरत: '?।। (मज़ाक एक तरफ, मैं इसे और अधिक "हड़ताली" द्वारा वर्ष जवाब स्पष्ट कर दिया है यह अभी भी उपयोगी हो सकता है एक नौसिखिया को समझने के लिए है कि इसका जवाब बदल गया है
माथीउ नपोली

@ लोग इसे हटाए जाने पर उत्तर से प्राप्त लाभ खो देते हैं। इसे संपादित करना बेहतर है।
mbomb007

4

एक सरल सरणी शुरू करना:

<?php $array1=array(10,20,30,40,50); ?>

सरणी के भीतर प्रारंभिक सरणी:

<?php  $array2=array(6,"santosh","rahul",array("x","y","z")); ?>

स्रोत: कोड के लिए सॉर्स


3
मूल प्रश्न यह था कि खाली सरणी को कैसे शुरू किया जाए ।
टॉम ऑगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.