首頁>Club>
考慮一維陣列,多維陣列,以及關聯陣列的情況。
12
回覆列表
  • 1 # 程式設計師小助手

    引言

    我們對於 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 :_)

  • 2 # taoyu0605

    最簡單就是 一個遞迴foreach 取長度-1作為key去拿值 判斷值如果是陣列繼續遞迴深入 直到最後返回 搞定

  • 3 # 我叫張凱

    小助手,我給你再補充一種辦法,直接將原資料顛倒取第一個下標值就可以得到原陣列的最後一個原素。原陣列完好無損。

    $arr=array_reverse($arr);

    $arr[0];

    $arr=array_reverse($arr);

  • 4 # 窮站長

    先用php count 函式計算一下陣列長度:$count=count($arr)

    然後獲取陣列最後一位的值:echo $arr[$count-1]

  • 中秋節和大豐收的關聯?
  • 銀行開卡被忽悠綁定了證券開戶有危害嗎?