আমি কীভাবে অ্যারের শেষ কীটি পেতে পারি?
আমি কীভাবে অ্যারের শেষ কীটি পেতে পারি?
উত্তর:
একটি সমাধান 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')
এটা কী 0 বরং 4. চেয়ে ফিরে আসবে
যদিও end()
এটি সবচেয়ে সহজ বলে মনে হচ্ছে এটি দ্রুততম নয়। দ্রুত এবং অনেক শক্তিশালী বিকল্প হ'ল array_slice()
:
$lastKey = key(array_slice($array, -1, 1, true));
পরীক্ষাগুলি হিসাবে , 500000 উপাদান সহ একটি অ্যারেতে, এটি প্রায় 7x দ্রুত!
end($arr);$key = key($arr);reset($arr);
করেছিলাম (ক) এর সাথে (খ) তুলনা করেছি $key = key(array_slice($arr,-1,1,true));
... যার ফলে খুব end()
বেশি দ্রুত হওয়া যায়! শেষ () = 0.05326 সেকেন্ড, অ্যারে_স্লাইস = 8.506 সেকেন্ড ... হু ??
end()
এটি দ্রুততম কারণ এটি খুব সাধারণ সি-ফাংশন থেকে নেওয়া যেতে পারে যেমন:int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
last
শেষ উপাদানটির অভ্যন্তরীণ পয়েন্টার রয়েছে । মেকিং end()
প্রায় কাছাকাছি হে (1)। :-)
আমি পছন্দ করি
end(array_keys($myarr))
end((array_keys($myarr)))
বিজ্ঞপ্তি পেতে ব্যবহার করতে পারেন ।
পিএইচপি 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 এর পরে গড় হয় প্রাথমিক বেঞ্চমার্কের জন্য @ এমএইচিটগারাকে ক্রেডিট @ তাদেজমগজ্ঞার উত্তরে মন্তব্য করেছে ।
এর অর্থ আপনি চূড়ান্ত কীটির মান ছাড়াই পুনরুদ্ধার করতে পারেন:
এই ফাংশনটি দীর্ঘ সময়সীমা ও অ্যার ফাংশন সরঞ্জাম বেল্টের একটি স্বাগত সংযোজন যা কার্যকারিতা উন্নত করে, অবাঞ্ছিত পার্শ্ব-প্রতিক্রিয়াগুলি এড়িয়ে দেয় এবং পরিষ্কার / প্রত্যক্ষ / স্বজ্ঞাত কোড সক্ষম করে।
এখানে একটি ডেমো রয়েছে :
$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()
অ্যারে_কি_ফার্স্ট () এর সহোদর কাজ ।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
নিম্নলিখিত হিসাবে অ্যারে_পপ এবং অ্যারে_কিগুলি ফাংশনটি ব্যবহার করার চেষ্টা করুন :
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
array_pop()
এর রিটার্ন মান নিয়ে কাজ করে । array_keys()
পিএইচপি হিসাবে> = .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 করে নেওয়া হবে (অ্যারে কীগুলি 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'
এটি কাজ করে কারণ পিএইচপি এটির অ্যারি পয়েন্টারটি অভ্যন্তরীণভাবে $ অ্যারের জন্য সরায়
সর্বোত্তম সম্ভাব্য সমাধান যা ইনলাইনও ব্যবহার করা যেতে পারে:
end($arr) && false ?: key($arr)
এই সমাধানটি কেবল প্রকাশ / বিবৃতি এবং ভাল সরবরাহ করে সেরা সম্ভাব্য পারফরম্যান্স নয়।
অন্তর্নিহিত উদাহরণ ব্যবহার:
$obj->setValue(
end($arr) && false ?: key($arr) // last $arr key
);
আপডেট: পিএইচপি 7.3+ এ: সদ্য যুক্ত হওয়া array_key_last()
পদ্ধতিটি ব্যবহার করুন (অবশ্যই) ।