2016-12-12 12 views
7

उदाहरण के लिए:PHP: जब आप मौजूदा इंडेक्स के साथ सरणी में मूल्य जोड़ रहे हैं तो यह नोटिस नहीं बढ़ाता है?

$array = []; 

echo $array['bar']; // PHP NOTICE - trying to access not existing key` 

$array['bar'][] = 'foo'; // Nothing 

मैं समझता हूँ कि यह है कि सूचकांक 'बार' के साथ सरणी बनाता है, लेकिन कैसे है कि आंतरिक रूप से पीएचपी सौदों करता है?

+0

यह ठीक है कि यह कैसे काम करता है। – AbraCadaver

+3

@AbraCadaver इस प्रकार एक धर्म शुरू होता है, केवल सवाल का पालन न करें। ओपी सवाल वैध है। आपका जवाब नहीं है। – Andrew

+1

@ एंड्रयू: यह मजाकिया है, मैंने जवाब पोस्ट नहीं किया। – AbraCadaver

उत्तर

3

$array['bar'][] = 'foo'; कोई सूचना या त्रुटि नहीं लौटाती है क्योंकि कोई त्रुटि नहीं है। आप एक नई सरणी अनुक्रमणिका बना रहे हैं, और उसके भीतर एक और अनुक्रमणिका, और इसके लिए एक मूल्य असाइन कर रहे हैं। कथन का मतलब यही है। वापस करने में कोई त्रुटि नहीं है।

आप यदि किसी विशेष सरणी सूचकांक सेट नहीं है, तो आप array_key_exists उपयोग कर सकते हैं के लिए (http://php.net/manual/en/function.array-key-exists.php) व्यवहार करना चाहते हैं:।

if(array_key_exists('bar', $array)){ 
    $array['bar'][] = 'foo'; 
} else { 
    // something else 
} 

कि अगर इस सवाल कार्यात्मक (यानी है है, तो आप की कोशिश कर रहे कुछ विशिष्ट पूरा करें)। यदि प्रश्न अधिक वैचारिक है - PHP एक वैरिएबल असाइनमेंट को त्रुटि के रूप में क्यों नहीं पढ़ता है:

PHP एक पंक्ति में एक चर को प्रारंभ करने और असाइन करने में सक्षम है, यानी $foo = 'bar'। यह एक त्रुटि वापस नहीं करता है भले ही $foo पहले परिभाषित नहीं किया गया था क्योंकि PHP पहले चर को प्रारंभ करता है। सरणी इंडेक्स के लिए एक ही विधि सच है। $array['foo'][] = 'bar' कोई त्रुटि या नोटिस नहीं लौटाता है क्योंकि PHP सरणी अनुक्रमणिका को प्रारंभ कर रहा है जैसे कि यह एक चर होगा।

+0

आपने अभी भी सवाल का जवाब नहीं दिया है, अर्थात् क्यों (और PHP आंतरिक रूप से इसे कैसे संभालता है) यह एक नोटिस फेंकता है जब आप किसी मौजूदा कुंजी तक पहुंचने का प्रयास कर रहे होते हैं, लेकिन जब आप हों तो यह कोई नोटिस नहीं फेंकता एक सरणी – Dragos

+3

की एक मौजूदा कुंजी के लिए मान सेट करने का प्रयास कर रहा है क्योंकि कार्यशील रूप से बोलते हुए, आप किसी भी कुंजी कुंजी के लिए मान सेट करने की कोशिश नहीं कर रहे हैं। आप एक कुंजी, और इसके अंदर एक और कुंजी सेट कर रहे हैं, और उस कुंजी को मान निर्दिष्ट कर रहे हैं। PHP उस कुंजी निर्माण को कम करने के लिए पर्याप्त बुद्धिमान है। इसका विरोध तब होता है जब आप उस कुंजी को एक्सेस करने का प्रयास करते हैं जो मौजूद नहीं है, इस स्थिति में PHP कुछ भी नहीं कर सकता है। – CGriffin

+0

@ ड्रैगोस पहले गैर-मौजूदा चर बनाने की प्रक्रिया को प्रारंभिक कहा जाता है। PHP में आप पहले गैर-मौजूदा चर के लिए मान निर्दिष्ट करके एक चर प्रारंभ कर सकते हैं। इस मामले में कोई भी सूचना नहीं होगी। यह वही है जब आप किसी सरणी में नई कुंजी के लिए मान सेट करते हैं। – RWS

-1

यह type casting का एक निहित रूप है। तो जब हम इस

$array['bar'][] = 'foo'; 

करना यह करने के लिए

$array['bar'] = (array)'foo'; 

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

$array = ['Foo' => 1]; 
$array['Foo'][] = 2; // Warning: Cannot use a scalar value as an array 
संबंधित मुद्दे