वास्तविक दुनिया में यह इतनी सरल प्रतिक्रिया नहीं है। मान लीजिए कि हमारे पास संभावित प्रतिक्रियाओं के ये उदाहरण हैं जो आप कुछ पुस्तकालयों में पा सकते हैं।
$array1 = array();
$array2 = array(1,2,3,4);
$array3 = array('hello'=>'world', 'foo'=>'bar');
$array4 = null;
var_dump('reset1', reset($array1));
var_dump('reset2', reset($array2));
var_dump('reset3', reset($array3));
var_dump('reset4', reset($array4)); // Warning
var_dump('array_shift1', array_shift($array1));
var_dump('array_shift2', array_shift($array2));
var_dump('array_shift3', array_shift($array3));
var_dump('array_shift4', array_shift($array4)); // Warning
var_dump('each1', each($array1));
var_dump('each2', each($array2));
var_dump('each3', each($array3));
var_dump('each4', each($array4)); // Warning
var_dump('array_values1', array_values($array1)[0]); // Notice
var_dump('array_values2', array_values($array2)[0]);
var_dump('array_values3', array_values($array3)[0]);
var_dump('array_values4', array_values($array4)[0]); // Warning
var_dump('array_slice1', array_slice($array1, 0, 1));
var_dump('array_slice2', array_slice($array2, 0, 1));
var_dump('array_slice3', array_slice($array3, 0, 1));
var_dump('array_slice4', array_slice($array4, 0, 1)); // Warning
list($elm) = $array1; // Notice
var_dump($elm);
list($elm) = $array2;
var_dump($elm);
list($elm) = $array3; // Notice
var_dump($elm);
list($elm) = $array4;
var_dump($elm);
जैसा कि आप देख सकते हैं, हमारे पास कई 'एक लाइन' समाधान हैं जो कुछ मामलों में अच्छी तरह से काम करते हैं, लेकिन सभी में नहीं।
मेरी राय में, आपके पास केवल एडर के साथ ही हैंडलर होना चाहिए।
अब प्रदर्शन के बारे में बात करते हुए, यह मानते हुए कि हमारे पास हमेशा सरणी है, जैसे:
$elm = empty($array) ? null : ...($array);
...you would use without errors:
$array[count($array)-1];
array_shift
reset
array_values
array_slice
array_shift
की तुलना में तेज है reset
, कि [गिनती () - 1] की तुलना में अधिक तेज है, और ये तीनों की तुलना में तेजी से array_values
और हैं array_slice
।