PHP的array_slice與array_splice差別
Contents
array_slice() 和 array_splice() 這兩個函式很容易混在一起看,因為名字很像、回傳結果也都可能是陣列,但它們的核心差異其實非常重要:一個只是切出片段,一個會直接改動原陣列。
如果這個觀念沒有先分清楚,後面 debug 時很容易出現「我只是取一段資料,怎麼原本陣列也變了」的狀況。
先看函式定義
|
|
這裡最關鍵的一點,是 array_splice() 的第一個參數前面有 &,代表它會直接操作原本的陣列。
array_slice() 做什麼
array_slice() 是從陣列中切出一段資料回來,但不會修改原始陣列。
|
|
適合用在:
- 分頁切片。
- 只想取部分資料。
- 不希望動到原陣列。
array_splice() 做什麼
array_splice() 除了能取出某段資料,也會把那一段從原陣列移除,甚至可以順便塞入替換內容。
|
|
如果再加上 replacement,就更像是「抽掉後換新值」。
和 JavaScript 的對照
這兩個函式和 JavaScript 的概念很像:
array_slice()類似 JavaScript 的slice()。array_splice()類似 JavaScript 的splice()。
所以如果你本來就熟 JavaScript,這樣聯想通常很好記。
常見誤解
1. 兩者只是名稱差一點點
不是。最大的差別就在於會不會影響原陣列。
2. array_splice() 只是進階版 array_slice()
也不完全對。它的用途比較偏向修改資料結構,而不只是讀取片段。
小結
如果你只是想取出部分陣列內容,通常優先用 array_slice();如果你要把某段資料從原陣列移掉或替換掉,才用 array_splice()。把「是否改動原陣列」這個判斷先放在腦中,之後就不太會選錯。