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

PHP 刪除陣列元素完整指南:unset() 與 array_splice() 差異實測

     編輯:PHP 相關知識

兩種刪除方式對比

方法一:unset() - 刪除但不重建索引

<?php
$a = array("red", "green", "blue", "yellow");
echo count($a);        // 4
unset($a[1]);          // 刪除第 2 元素
echo count($a);        // 3
echo $a[2];            // blue(索引未重排!)
echo $a[1];            // 無值(洞)
?>

特性:元素數減少,但鍵名保持原狀,產生「稀疏陣列」(索引有洞)。

方法二:array_splice() - 刪除並重建索引

<?php
$a = array("red", "green", "blue", "yellow");
echo count($a);              // 4
array_splice($a, 1, 1);      // 從索引 1 刪除 1 個
echo count($a);              // 3
echo $a[2];                  // yellow(索引重排!)
echo $a[1];                  // blue
?>

特性:元素刪除後自動重排數字索引(0,1,2...),字串鍵不受影響。

array_splice() 完整語法

array array_splice(array &$input, int $offset[, int $length[, mixed $replacement]])
參數說明
$input目標陣列(傳址修改)
$offset起始位置;正數從開頭,負數從結尾
$length刪除/替換元素數;省略=到結尾;負數=從結尾往前
$replacement替換值(陣列/純量);省略=單純刪除

進階用法範例

<?php
$a = [1,2,3,4,5];

// 替換:索引 1 起 2 個元素換成 [x,y]
array_splice($a, 1, 2, ['x','y']);
// 結果:[1, 'x', 'y', 4, 5]

// 插入:不刪除任何元素(length=0)
array_splice($a, 2, 0, 'new');
// 結果:[1, 'x', 'new', 'y', 4, 5]

// 從倒數第 2 開始刪 1 個
array_splice($a, -2, 1);
// 結果:[1, 'x', 'new', 'y', 5]
?>

選擇指南

需求推薦函數理由
刪除後需連續索引(列表語意)array_splice()自動重排,無索引洞
保留原鍵名關聯(字典/關聯陣列)unset()不改動其他鍵
同時刪除並插入新元素array_splice()原子性替換
刪除多個離散鍵unset() 多次 / array_diff_key()彈性高

常見陷阱

  • unset($arr) 會銷毀整個陣列變數,非清空內容(清空用 $arr = [])
  • foreach 迴圈中 unset() 當前元素安全,但 array_splice() 會破壞迴游標
  • 多維陣列刪除只影響第一層,巢狀結構不受影響

總結

列表語意用 array_splice(),關聯語意用 unset()。理解索引重排行為是避免「索引洞」導致邏輯錯誤的關鍵。

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