मुझे किसी सरणी की अंतिम कुंजी कैसे मिल सकती है?
मुझे किसी सरणी की अंतिम कुंजी कैसे मिल सकती है?
जवाबों:
एक समाधान के संयोजन का उपयोग करने के लिए किया जाएगा end
और (के हवाले से) :key
end()
अंतिम तत्व के लिए सरणी के आंतरिक पॉइंटर को आगे बढ़ाता है, और उसका मूल्य लौटाता है। key()
वर्तमान सरणी स्थिति के सूचकांक तत्व को लौटाता है। तो, कोड का एक हिस्सा जैसे कि यह एक चाल करना चाहिए:
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
end($array); // move the internal pointer to the end of the array
$key = key($array); // fetches the key of the element pointed to by the internal pointer
var_dump($key);
उत्पादन होगा:
string 'last' (length=4)
यानी मेरे ऐरे के अंतिम तत्व की कुंजी।
इसके बाद किया गया है सरणी का आंतरिक पॉइंटर सरणी के अंत में होगा। जैसा कि टिप्पणियों में बताया गया है, आप reset()
सूचक को सरणी की शुरुआत में वापस लाने के लिए सरणी पर चलाना चाह सकते हैं ।
reset()
) ;; लेकिन आप उस फ़ंक्शन को इंगित करने में सही हैं, जो उपयोगी हो सकता है।
array('a', 'b', 'c', 'd', 'a')
यह ० की बजाय ४ कुंजी देगा।
हालांकि end()
यह सबसे आसान लगता है, यह सबसे तेज़ नहीं है। तेज और अधिक मजबूत विकल्प है array_slice()
:
$lastKey = key(array_slice($array, -1, 1, true));
जैसा कि परीक्षण कहते हैं , 500000 तत्वों के साथ एक सरणी पर, यह लगभग 7x तेज है!
end($arr);$key = key($arr);reset($arr);
विरुद्ध (b) की तुलना की $key = key(array_slice($arr,-1,1,true));
... जिसके परिणामस्वरूप end()
MUCH अधिक तेज़ हो गया! अंत () = 0.05326 सेकंड, array_slice = 8.506 सेकंड ... हुह ??
end()
सबसे तेज़ है क्योंकि यह एक बहुत ही सरल सी-फ़ंक्शन से लिया जा सकता है, जैसे:int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
last
में अंतिम तत्व के लिए एक आंतरिक सूचक है। end()
बहुत अधिक ओ (१) बनाना । :-)
मैं पसंद करता हूं
end(array_keys($myarr))
end((array_keys($myarr)))
नोटिस के आसपास पाने के लिए उपयोग कर सकते हैं ।
चूंकि PHP 7.3 (2018) इसके लिए (अंत में) कार्य है: http://php.net/manual/en/function.array-key-last.php
$array = ['apple'=>10,'grape'=>15,'orange'=>20];
echo array_key_last ( $array )
उत्पादन होगा
orange
महज प्रयोग करें : echo $array[count($array) - 1];
int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
जो है दिलचस्प है लेकिन व्यवसाय के लिए अच्छा नहीं है जब आप एक समय के बजट पर हों
$a[1] = 1; $a[5] = 5; $a[0] = 0;
तो आपके पास उस क्रम में कुंजियों (1, 5, 0) के साथ एक सरणी होगी। count($a)
3 उपज देगा और $a[2]
परिभाषित नहीं है। यह निश्चित रूप से आपको 5 वापस नहीं देता है।
पता नहीं कि यह तेजी से हो रहा है या नहीं, लेकिन यह इस तरह से करना आसान लगता है, और आप समाप्त होने के लिए एक फ़ंक्शन में नहीं गुजरने से त्रुटि से बचते हैं () ...
यह सिर्फ एक चर की जरूरत है ... कोड की एक और पंक्ति लिखने के लिए एक बड़ी बात नहीं है, फिर यदि आप की जरूरत है तो इसे परेशान करें।
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
PHP7.3 के रूप में आप array_key_last () के साथ एक सरणी में अंतिम कुंजी (बाहरी स्तर) तक सीधे पहुंच सकते हैं
निश्चित रूप से इस पृष्ठ पर बहुत सारी बहस बिस्तर पर डालती है। यह सर्वश्रेष्ठ प्रदर्शन करने वाले का हाथ है, इसका कोई दुष्प्रभाव नहीं है, और यह प्रश्न पूछने के लिए प्रत्यक्ष, सहज, एकल-कॉल तकनीक है।
प्रमाण के रूप में एक मोटा बेंचमार्क: https://3v4l.org/hO1Yf
array_slice() + key(): 1.4 end() + key(): 13.7 array_key_last(): 0.00015
* परीक्षण सरणी में 500000 तत्व होते हैं, माइक्रोटाइम 100x दोहराया जाता है, फिर वैज्ञानिक संकेतन से बचने के लिए औसत 1000 से गुणा किया जाता है। शुरुआती बेंचमार्क के लिए @MAChitgarha को क्रेडिट @ TadejMagajna के जवाब के तहत टिप्पणी की ।
इसका मतलब है कि आप बिना अंतिम कुंजी के मूल्य को पुनः प्राप्त कर सकते हैं:
यह फ़ंक्शन लंबे समय से अतिदेय था और प्रदर्शन में सुधार करने वाले सरणी फ़ंक्शन टूल बेल्ट के लिए एक स्वागत योग्य अतिरिक्त है, अवांछित दुष्प्रभावों से बचा जाता है, और स्वच्छ / प्रत्यक्ष / सहज ज्ञान युक्त कोड को सक्षम करता है।
यहाँ एक डेमो है :
$array = ["a" => "one", "b" => "two", "c" => "three"];
if (!function_exists('array_key_last')) {
echo "please upgrade to php7.3";
} else {
echo "First Key: " , key($array) , "\n";
echo "Last Key: " , array_key_last($array) , "\n";
next($array); // move array pointer to second element
echo "Second Key: " , key($array) , "\n";
echo "Still Last Key: " , array_key_last($array);
}
आउटपुट:
First Key: a
Last Key: c // <-- unaffected by the pointer position, NICE!
Second Key: b
Last Key: c // <-- unaffected by the pointer position, NICE!
कुछ नोट:
array_key_last()
array_key_first () का सिबलिंग फ़ंक्शन है ।null
यदि सरणी खाली है, तो दोनों फ़ंक्शन वापस आ जाते हैं ।array_value_first()
और array_value_last()
) ने सूचक तत्वों को अज्ञानी तक पहुँचाने की पेशकश की होगी, लेकिन वे स्पष्ट रूप से जीवन में आने के लिए पर्याप्त वोट हासिल करने में असफल रहे।नई विशेषताओं पर चर्चा करने वाले कुछ प्रासंगिक पृष्ठ इस प्रकार हैं:
ps यदि कोई किसी अन्य तकनीक का वजन कर रहा है, तो आप तुलना के इस छोटे संग्रह का उल्लेख कर सकते हैं: ( डेमो )
Duration of array_slice() + key(): 0.35353660583496 Duration of end() + key(): 6.7495584487915 Duration of array_key_last(): 0.00025749206542969 Duration of array_keys() + end(): 7.6123380661011 Duration of array_reverse() + key(): 6.7875385284424 Duration of array_slice() + foreach(): 0.28870105743408
इस प्रकार array_pop और array_keys फ़ंक्शन का उपयोग करने का प्रयास करें :
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
array_pop()
की वापसी मूल्य पर चल रही है array_keys()
और नहीं मूल सरणी पर।
PHP के रूप में = = 7.3 array_key_last()
किसी भी सरणी के अंतिम कुंजी प्राप्त करने का सबसे अच्छा तरीका है। के संयोजन का उपयोग करना end()
, key()
और reset()
सिर्फ एक सरणी के अंतिम कुंजी पाने के लिए अपमानजनक है।
$array = array("one" => bird, "two" => "fish", 3 => "elephant");
$key = array_key_last($array);
var_dump($key) //output 3
की तुलना करें
end($array)
$key = key($array)
var_dump($key) //output 3
reset($array)
यदि आप के संयोजन का उपयोग कर रहे सूचक शुरुआत में होने के लिए सरणी रीसेट करना होगा end()
औरkey()
मैं इस समस्या का वैकल्पिक समाधान भी प्रस्तुत करना चाहूंगा।
यह मानते हुए कि आपकी सभी कुंजियाँ बिना किसी अंतराल के संख्यात्मक हैं, मेरा पसंदीदा तरीका यह है कि उस मान से तब 1 माइनस 1 की गणना करें (इस तथ्य पर ध्यान दें कि ऐरे कुंजियाँ 0 से शुरू होती हैं।
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
यह आपको देगा:
int (1) बिल्ली
आप इसका उपयोग कर सकते हैं:
$array = array("one" => "apple", "two" => "orange", "three" => "pear");
end($array);
echo key($array);
एक अन्य समाधान एक समारोह बनाने और इसका उपयोग करने के लिए है:
function endKey($array){
end($array);
return key($array);
}
$array = array("one" => "apple", "two" => "orange", "three" => "pear");
echo endKey($array);
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
इस के साथ एक कोशिश करो array_reverse()
।
$arr = array(
'first' => 01,
'second' => 10,
'third' => 20,
);
$key = key(array_reverse($arr));
var_dump($key);
$array = array(
'something' => array(1,2,3),
'somethingelse' => array(1,2,3,4)
);
$last_value = end($array);
$last_key = key($array); // 'somethingelse'
यह काम करता है क्योंकि PHP चाल यह सरणी सूचक आंतरिक रूप से $ सरणी के लिए है
सबसे अच्छा संभव समाधान जिसका उपयोग इनलाइन भी किया जा सकता है:
end($arr) && false ?: key($arr)
यह समाधान केवल अभिव्यक्ति / कथन है और अच्छा प्रदान करना सर्वोत्तम संभव प्रदर्शन नहीं है।
इनलाइन उदाहरण उपयोग:
$obj->setValue(
end($arr) && false ?: key($arr) // last $arr key
);
अद्यतन: PHP 7.3+ में: (निश्चित रूप से) नव जोड़ा array_key_last()
विधि का उपयोग करें।