अगर मेरे पास एक सरणी है जैसे:
$array['foo'] = 400;
$array['bar'] = 'xyz';
और मैं इसके लिए कुंजी जानने के बिना उस सरणी से पहला आइटम प्राप्त करना चाहता था, मैं यह कैसे करूंगा? क्या इसके लिए कोई फ़ंक्शन है?
अगर मेरे पास एक सरणी है जैसे:
$array['foo'] = 400;
$array['bar'] = 'xyz';
और मैं इसके लिए कुंजी जानने के बिना उस सरणी से पहला आइटम प्राप्त करना चाहता था, मैं यह कैसे करूंगा? क्या इसके लिए कोई फ़ंक्शन है?
जवाबों:
reset() यदि आप सरणी के अंदर एक तत्व है, तो आपको सरणी का पहला मूल्य देता है:
$value = reset($array);
FALSEसरणी खाली होने की स्थिति में भी यह आपको देता है।
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
यदि आप सरणी के बारे में पर्याप्त नहीं जानते हैं (आपको यकीन नहीं है कि पहली कुंजी फू या बार है ) तो सरणी अच्छी तरह से हो सकती है, शायद, खाली ।
इसलिए यह जांचना सबसे अच्छा होगा, खासकर अगर मौका है कि लौटाया गया मूल्य बूलियन FALSE हो सकता है:
$value = empty($arr) ? $default : reset($arr);
उपरोक्त कोड का उपयोग होता है resetऔर इसके साइड इफेक्ट्स होते हैं (यह एरे के आंतरिक पॉइंटर को रीसेट करता है), इसलिए आप एरे array_sliceके पहले तत्व की कॉपी को जल्दी एक्सेस करने के लिए उपयोग करना पसंद कर सकते हैं :
$value = $default;
foreach(array_slice($arr, 0, 1) as $value);
मान लें कि आप कुंजी और मान दोनों अलग-अलग प्राप्त करना चाहते हैं , तो आपको चौथे पैरामीटर को जोड़ने की आवश्यकता है array_slice:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
एक जोड़ी के रूप में पहला आइटम पाने के लिए ( key => value):
$item = array_slice($arr, 0, 1, true);
अंतिम आइटम, कुंजी और मूल्य अलग-अलग प्राप्त करने के लिए सरल संशोधन :
foreach(array_slice($arr, -1, 1, true) as $key => $value);
यदि सरणी वास्तव में बड़ी नहीं है, तो आपको वास्तव में ज़रूरत नहीं है array_sliceऔर पूरी कुंजी सरणी की प्रतिलिपि प्राप्त कर सकते हैं, फिर पहला आइटम प्राप्त करें:
$key = count($arr) ? array_keys($arr)[0] : null;
यदि आपके पास एक बहुत बड़ा सरणी है, हालांकि, कॉल करने के array_keysलिए महत्वपूर्ण समय और मेमोरी की आवश्यकता होगी array_slice(दोनों फ़ंक्शन सरणी से चलते हैं, लेकिन बाद में समाप्त हो जाता है जैसे ही यह आवश्यक वस्तुओं की संख्या एकत्र कर लेता है - जो एक है)।
एक उल्लेखनीय अपवाद तब होता है जब आपके पास पहली कुंजी होती है जो एक बहुत बड़ी और जटिल वस्तु की ओर इशारा करती है। उस मामले में array_sliceउस पहली बड़ी वस्तु का डुप्लिकेट होगा, जबकि array_keysकेवल चाबियाँ लेगा।
PHP 7.3 के array_key_first()साथ ही लागू होता है array_key_last()। साइड इफेक्ट के रूप में सरणी की आंतरिक स्थिति को रीसेट किए बिना कुशलतापूर्वक पहली और अंतिम कुंजी तक पहुंचने के लिए ये स्पष्ट रूप से प्रदान किए जाते हैं।
इसलिए PHP 7.3 में इसके पहले मूल्य को $arrayएक्सेस किया जा सकता है
$array[array_key_first($array)];
आपने अभी भी बेहतर जांच की थी कि सरणी खाली नहीं है, या आपको एक त्रुटि मिलेगी:
$firstKey = array_key_first($array);
if (null === $firstKey) {
$value = "Array is empty"; // An error should be handled here
} else {
$value = $array[$firstKey];
}
नकली लूप जो पहले पुनरावृत्ति पर टूटता है:
$key = $value = NULL;
foreach ($array as $key => $value) {
break;
}
echo "$key = $value\n";
या उपयोग each()( चेतावनी: PHP 7.2.0 के रूप में पदावनत ):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
reset()समारोह केवल पहले मान प्राप्त होता है।
कुछ विकल्प है। array_shift()पहला तत्व लौटाएगा, लेकिन यह पहले तत्व को सरणी से हटा देगा।
$first = array_shift($array);
current() उस सरणी का मान लौटाएगा जो उसके आंतरिक मेमोरी पॉइंटर को इंगित कर रहा है, जो डिफ़ॉल्ट रूप से पहला तत्व है।
$first = current($array);
यदि आप यह सुनिश्चित करना चाहते हैं कि यह पहले तत्व की ओर इशारा कर रहा है, तो आप हमेशा उपयोग कर सकते हैं reset()।
reset($array);
$first = current($array);
reset()वास्तव में तत्व वापस आ जाता है, इसलिए इसका अनुसरण करना एक $first = current($array)निरर्थक है।
बस इतना है कि हमारे पास कुछ अन्य विकल्प हैं: reset($arr);यदि आप सरणी पॉइंटर को रखने की कोशिश नहीं कर रहे हैं, तो बहुत अच्छा है, और बहुत बड़े सरणियों के साथ यह ओवरहेड की न्यूनतम मात्रा को बढ़ाता है। उस ने कहा, इसके साथ कुछ समस्याएं हैं:
$arr = array(1,2);
current($arr); // 1
next($arr); // 2
current($arr); // 2
reset($arr); // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.
सूचक को बदले बिना ऐसा करने का तरीका:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
इसका लाभ $arr[reset(array_keys($arr))];यह है कि यह एक चेतावनी देता है यदि सरणी वास्तव में खाली है।
हम कर सकते हैं
$first = reset($array);
के बजाय
reset($array);
$first = current($array);
जैसा reset()
रीसेट के बाद सरणी का पहला तत्व लौटाता है;
इस तरह से कुंजी जानने के बिना उस सरणी से पहला आइटम प्राप्त करने के लिए रीसेट () फ़ंक्शन का उपयोग करें।
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
आउटपुट // 400
आप यह कोशिश कर सकते हैं।
सरणी का पहला मान प्राप्त करने के लिए: -
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
var_dump(current($large_array));
?>
सरणी की पहली कुंजी प्राप्त करने के लिए
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
$large_array_keys = array_keys($large_array);
var_dump(array_shift($large_array_keys));
?>
मैं यह पहला और अंतिम मूल्य प्राप्त करने के लिए करता हूं। यह अधिक मूल्यों के साथ भी काम करता है।
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz
PHP 7.3.0 से शुरू करना आंतरिक पॉइंटर को रीसेट किए बिना करना संभव है। आप उपयोग करेंगे array_key_first। यदि आप सुनिश्चित हैं कि आपके सरणी में यह मान है तो आप बस कर सकते हैं:
$first = $array[array_key_first($array)];
अधिक संभावना है, आप उस मामले को संभालना चाहेंगे जहां सरणी खाली है:
$first = (empty($array)) ? $default : $array[array_key_first($array)];