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

PHP 陣列刪除元素後重新索引:unset vs array_splice vs array_values 完整指南

     編輯:PHP 綜合知識

核心問題演示

 a
    [2] => c  <-- 索引跳號!非連續
    [3] => d
)
*/
?>

unset 只銷毀值,**保留原鍵名**,導致數值索引出現斷層。

三大重新索引方案

1. array_splice (原地修改、語意明確)

 a
    [1] => c  <-- 重新索引連續
    [2] => d
)
*/
?>

優點:單行搞定刪除+重索引、支援長度參數可批次刪除、原陣列引用修改。

2. array_values (建立新陣列、通用)

a, 1=>c, 2=>d]
?>

優點:適用於任意鍵名混亂情況、語意清晰「取值重組」。

3. foreach 重建 (舊版相容、可控制邏輯)


進階:依值刪除並重新索引

 $v !== $valToRemove));
// 結果: ['a', 'c', 'd']

// 方法三:陣列差集 (保留鍵名需再值)
$arr = array_values(array_diff($arr, [$valToRemove]));
?>

關鍵名陣列的特殊處理

1, 'name'=>'John', 'email'=>'john@example.com'];
unset($assoc['name']);

// 關鍵名陣列通常不需重新索引 (鍵名有語意)
// 但若需轉為數值索引:
$indexed = array_values($assoc); // [1, 'john@example.com']
?>

效能與記憶體對比 (100 萬元素)

array_splice:  ~12ms, 原地修改,記憶體穩定
array_values:  ~8ms,  建立新陣列,峰值記憶體 2x
unset+foreach: ~15ms, 手動重建,彈性最大
array_filter:  ~10ms, 內建優化,需 PHP 7.4+ 箭頭函數

多維陣列刪除子元素

1, 'name'=>'A'],
    ['id'=>2, 'name'=>'B'],
    ['id'=>3, 'name'=>'C'],
];

// 刪除 id=2 的用戶並重新索引
$users = array_values(array_filter($users, fn($u) => $u['id'] !== 2));
/*
Array
(
    [0] => Array([id]=>1 [name]=>A)
    [1] => Array([id]=>3 [name]=>C)
)
*/
?>

總結選型指南

場景推薦理由
刪除指定索引單一元素array_splice($arr, $idx, 1)原地、單行、語意精確
刪除指定值所有元素array_values(array_filter(...))函數式、不可變風格
任意鍵名混亂需重組array_values($arr)通用、清晰
需保留原陣列引用array_splice就地修改
PHP < 5.4 環境foreach 重建相容性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved