首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 陣列首尾元素刪除函式完整指南:array_shift、array_pop 與 array_splice

     編輯:PHP 綜合知識

前言

PHP 提供多種內建函式操作陣列首尾元素,理解其行為差異、回傳值與副作用,能避免常見 Bug 並寫出更清晰的程式碼。本文詳細比較 array_shift、array_pop 與 array_splice 三種方法。

方法一:array_pop() - 刪除最後一個元素

<?php
$fruits = ['apple', 'banana', 'orange'];

// 刪除並取得最後一個元素
$last = array_pop($fruits);

echo "被刪除元素: {$last}\n";        // 輸出: orange
echo "剩餘陣列: "; 
print_r($fruits);                      // 輸出: Array ( [0] => apple [1] => banana )
?>

關鍵特性

  • 回傳值: 被刪除的元素值;若陣列為空則回傳 NULL
  • 副作用: 原陣列長度減 1,數字鍵名重新索引(0 起始)
  • 適用: 堆疊(Stack)結構的「彈出」操作

方法二:array_shift() - 刪除第一個元素

<?php
$fruits = ['apple', 'banana', 'orange'];

// 刪除並取得第一個元素
$first = array_shift($fruits);

echo "被刪除元素: {$first}\n";       // 輸出: apple
echo "剩餘陣列: ";
print_r($fruits);                     // 輸出: Array ( [0] => banana [1] => orange )
?>

關鍵特性

  • 回傳值: 被刪除的元素值;若陣列為空則回傳 NULL
  • 副作用: 原陣列長度減 1,所有數字鍵名重新從 0 開始索引,字串鍵名保持不變
  • 效能注意: 大陣列時需重新索引所有元素,效能較 array_pop 差
  • 適用: 隊列(Queue)結構的「出隊」操作

方法三:array_splice() - 通用切割/刪除(可刪除首元素)

<?php
$fruits = ['apple', 'banana', 'orange'];

// 刪除第一個元素(位移 0,長度 1)
$removed = array_splice($fruits, 0, 1);

echo "被刪除元素: ";
print_r($removed);                    // 輸出: Array ( [0] => apple )
echo "剩餘陣列: ";
print_r($fruits);                     // 輸出: Array ( [0] => banana [1] => orange )

// 進階:一次刪除前兩個並插入新元素
$fruits = ['apple', 'banana', 'orange'];
array_splice($fruits, 0, 2, ['grape', 'pear']); 
// 結果: ['grape', 'pear', 'orange']
?>

關鍵差異

特性array_shift()array_splice($arr, 0, 1)
回傳值單一元素值包含被刪元素的陣列
原陣列修改是(重新索引)是(重新索引)
靈活度僅限首元素可指定位置、長度、替換

三大函式完整比較表

函式操作位置回傳值鍵名重索引常見用途
array_pop()陣列尾端單一元素值 / NULL數字鍵名重索引堆疊彈出、移除最後項目
array_shift()陣列首端單一元素值 / NULL數字鍵名重索引隊列出隊、處理第一項目
array_splice()任意位置被刪除元素組成的陣列數字鍵名重索引區間刪除/替換/插入

實務建議與最佳實踐

  1. 檢查陣列非空: 操作前先用 if (!empty($arr)) 避免 NULL 導致後續邏輯錯誤
  2. 關聯陣列謹慎用 shift/pop: 字串鍵名不變,但數字鍵名會重排,可能破壞預期結構
  3. 大量資料效能: 避免在大陣列循環中使用 array_shift,改用索引指標或 array_reverse + array_pop
  4. 語意化命名: 變數命名如 $firstItem = array_shift($queue) 增加可讀性

常見錯誤範例

<?php
// ❌ 錯誤:直接在空陣列操作
$empty = [];
$val = array_shift($empty); // $val = NULL,後續若直接用 $val['key'] 會報錯

// ✅ 正確:先檢查
$val = $empty ? array_shift($empty) : null;

// ❌ 錯誤:誤以為 array_splice 回傳單一值
$first = array_splice($arr, 0, 1); // $first 是陣列!
$name = $first['name']; // 錯誤:應為 $first[0]['name']

// ✅ 正確:取第一個被刪除元素
$removed = array_splice($arr, 0, 1);
$first = $removed[0] ?? null;
?>

掌握這三個函式的細微差別,能讓陣列操作更精準、效能更優、程式碼更易維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved