2012-12-02 12 views
6

नज़र foreach पाश को अगले मुख्य मिलती है:php कुंजी() या इस पर

<?php 
    $array = array('a' => '…', 'b' => '…', 'c' => '…', 'd' => '…', 'e' => '…', 'f' => '…'); 
    foreach ($array as $key => $val){ 
     echo "current key: $key, next key: ".key(($array))."<br>"; 
    } 
?> 

उत्पादन:

current key: a, next key: b 
current key: b, next key: c 
current key: c, next key: d 
current key: d, next key: e 
current key: e, next key: f 
current key: f, next key: a 

मैं एक समारोह के लिए खोज रहा था पाने के लिए एक foreach-loop के भीतर एक सहयोगी सरणी की अगली कुंजी। मैंने थोड़ी कोशिश की और अचानक यह काम किया। (जैसा कि आप मेरे उदाहरण में देख सकते हैं)।

लेकिन यह काम क्यों करता है? क्या इस का कोई मतलब निकलता है? … मुझे नहीं! क्या आप इसे मुझे समझा सकते हैं?

यह key(($array)) भाग के कारण है लेकिन क्यों? मेरा मतलब है .. यह एक गलती थी .. मैं key($array) लिखना चाहता था लेकिन मैं 2 रैपिंग ब्रैकेट को मिटाना भूल गया। तो यह संयोग था !!!

यह इस तरह से क्यों व्यवहार करता है? मेरा मतलब है, यह अच्छा है लेकिन ... ????

+3

दिलचस्प। यदि आप त्रुटि रिपोर्टिंग पर स्विच करते हैं, तो आपको बहुत सारी त्रुटियां दिखाई देगी। अतिरिक्त ब्रैकेट प्रत्यक्ष चर संदर्भ को तोड़ रहे हैं। '$ a' एक चर है, '($ ए)' एक अभिव्यक्ति है जिसके परिणामस्वरूप' $ a' का * मान * है। 'key' संदर्भ द्वारा पारित एक चर की अपेक्षा करता है। निश्चित नहीं है कि वास्तव में 'कुंजी' क्या करता है और यह जिस तरह से व्यवहार करता है, उससे व्यवहार क्यों करता है, लेकिन मैं इसे गलत, अपरिभाषित व्यवहार के तहत दर्ज करूंगा। – deceze

+1

व्हाओ, अगर यह इरादा व्यवहार अद्भुत है। इतने सारे बार मैंने ऐसा कुछ इस्तेमाल किया होगा। –

+0

लेकिन आप क्या सुझाव देते हैं? क्या मैं इसे इस तरह रखूंगा? –

उत्तर

4

key के लिए PHP मैनुअल के अनुसार, कुंजी() वर्तमान सरणी स्थिति का सूचकांक तत्व देता है।

समस्या key, या यहां तक ​​कि डबल ब्रांड्स के साथ भी बहुत कुछ नहीं है। कुंजी संदर्भ द्वारा सरणी प्राप्त करता है, इसलिए डबल ब्रांड्स बहुत कुछ नहीं कर रहे हैं।

व्यवहार foreach से आता है। जब foreach सरणी के माध्यम से पुनरावृत्त करता है, तो PHP के विभिन्न संस्करण सरणी के आंतरिक current सूचक को सेट करने पर अलग-अलग व्यवहार करेंगे, जो key(), next(), current() इत्यादि को देखे जाने पर देख रहे हैं।

PHP में Arrays अधिकांश भाषाओं में सरणी की तरह नहीं हैं; वे वास्तव में वस्तुओं (विशेष रूप से सहयोगी सरणी) हैं। उनके बारे में सोचें कि लिंक्ड सूचियों की तरह थोड़े (वे लिंक्ड सूचियां नहीं हैं, लेकिन केवल मेरे साथ चित्रण उद्देश्यों के लिए जाएं) - जब आप इसे फिर से शुरू करते हैं, तो आपको यह जानना होगा कि आप वर्तमान में कहां हैं और आप कहां जा रहे हैं।

क्या जाहिरा तौर पर यहां हो रहा है कि PHP का जो भी संस्करण आप चल रहे हैं पर है, foreachnext तत्व करने के लिए आंतरिक current सूचक पर पाश के लिए की शुरुआत स्थापित कर रही है, तुरंत में $key और $value चर सेट करने के बाद तुम्हारा कोड।

मैं निश्चित रूप से इस व्यवहार पर निर्भर करता हूं, क्योंकि PHP के बाद के अपडेट इस कोड को तोड़ सकते हैं। यह इस विशिष्ट संस्करण का सिर्फ एक मजेदार संयोग है। यदि आप अगली कुंजी चाहते हैं, तो अपने foreach लूप को प्रतिस्थापित करने के लिए देखें। next() पर PHP मैनुअल के अच्छे उदाहरण हैं, और prev(), each(), और "यहां भी देखें" अनुभाग में अन्य फ़ंक्शंस भी देखें।

+0

+100, निश्चित रूप से एक अच्छा जवाब है। –

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