PHP獲取數組最后一個值?
引言
我們對于 PHP 的數組操作樂此不疲,為什么?因為 PHP 編程你幾乎時時刻刻都在于數組打交道,對于數組的操作熟練程度,很大一部分因素關系著代碼的優劣。
今天我們來說說,如何獲取數組的最后一個元素,并且不刪除它。
不要小看這個需求,沒準兒你還做不對呢 :)
學習時間如果你首先想到了 array_pop,那很不幸,這個函數可以獲取最后一個元素,卻把數組更改了。
array_pop 彈出并返回 array 數組的最后一個單元,并將數組 array 的長度減一。如果 array 為空(或者不是數組)將返回 NULL。 此外如果被調用不是一個數則會產生一個 Warning。
這顯然不是我們要的結果。
其實實現一個需求的方法是多種多樣的,我們嘗試使用 10 種不同的辦法,來做到這一點。
$x = array_values(array_slice($array, -1))[0]
第一種,使用 array_slice 截取數組 $array 倒數第一個元素。返回的是一個數組。然后使用 array_values 重新編排索引值。因為數組只有一個元素,那么索引值必然是 0。原數組 $array 毫發無損。
$x = array_slice($array, -1)[0];
第二種方法沒有考慮關聯數組的情況,有可能索引 0 不存在。所以容錯性不好。
$x = array_pop((array_slice($array, -1)));
第三種方法,終于用到了 array_pop。不過是在 array_slice 階段的數組上使用。
$x = array_pop((array_slice($array, -1, 1)));
第四種方法,簡直是有魔性了,比第三種辦法相比,只是在 array_slice 截斷的長度手動指定為 1。
$x = end($array); reset($array);
第五種方法,用到數組指針了。end 返回最后一個元素。然后需要手動恢復指針位置到頭部,所以調用了一次 reset 函數。本方法有可能返回關聯數組,而不能拿到值。
$x = end((array_values($array)));
第六種方法,嚴格地為了返回最后一個元素的值,使用 array_values 進行了索引重新編排。
$x = $array[count($array)-1];
第七種方法,直接使用索引了。肯定是假設數組都是默認遞增索引的數組,所以 count 獲取的長度才有效。該方法容錯性差。
$keys = array_keys($array); $x = $array[$keys[count($keys)-1]];
第八種方法,是對第七種的不足的修復。
$x = $array[] = array_pop($array);
第九種方法,我們需要明白,使用連等復制,array_pop 彈出數組的最后一個元素后,同時賦值給 $x。這沒問題。賦值給原數組 $array[],這會對關聯數組重新排定索引,所以有副作用。
$x = $array[array_key_last($array)];
第十種,這種方法的容錯性也極高,因為使用了 array_key_last,有效地考慮了關聯數組的情況,而且結果也很取巧。這個方法很棒。但是只有 PHP 7.3 以上的版本才有。
寫在最后好了,大家好好消化一下上面10個方法的優劣,取長補短,深度學習吧。
Happy coding :_)
我是 @程序員小助手 ,持續分享編程知識,歡迎關注。