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

PHP unset() vs array_splice() 刪除數組元素的核心區別:鍵名重建與否

     編輯:PHP 綜合知識

刪除數組元素兩大函數行為迥異:unset() 保留原鍵名(產生「稀疏數組」),array_splice() 重建數字索引(生成「稠密數組」)。

1. unset():保留鍵名

$arr = ['a', 'b', 'c', 'd'];
unset($arr[1]); // 刪除 'b'
print_r($arr);
/* 輸出:
Array
(
    [0] => a
    [2] => c  // 鍵名 2 保留,無 1
    [3] => d
)
*/
  • 適用於**關聯數組**(鍵名有業務含義),刪除後鍵名不變。
  • 數字索引數組刪除後需手動 array_values($arr) 重建索引。

2. array_splice():重建索引

$arr = ['a', 'b', 'c', 'd'];
array_splice($arr, 1, 1); // 從偏移 1 刪除 1 個
print_r($arr);
/* 輸出:
Array
(
    [0] => a
    [1] => c  // 索引自動重建為 1
    [2] => d
)
*/
  • 適用於**索引數組**需保持連續索引的場景。
  • 簽名:array_splice(array &$input, int $offset, int $length = ?, mixed $replacement = []): array,返回被刪除元素組成的數組。

3. 刪除特定值的元素(遍歷 + unset)

$arr2 = [1, 3, 5, 7, 8];
foreach ($arr2 as $key => $value) {
    if ($value === 3) unset($arr2[$key]);
}
var_dump($arr2); // 保留原鍵名

4. 刪除空值元素:array_filter()

$array = ['a' => "abc", 'b' => "bcd", 'c' => "cde", 'd' => "def", 'e' => ""];
$array = array_filter($array); // 默認回調轉換為 bool,空字符串、0、false、null 被過濾
print_r($array);
/* 輸出:
Array
(
    [a] => abc
    [b] => bcd
    [c] => cde
    [d] => def
)
*/
  • array_filter() **保留鍵名關聯**,不重建索引。
  • 需重建索引:array_values(array_filter($array))。

總結選擇表

需求推薦函數鍵名行為
關聯數組刪除指定鍵unset($arr[$key])保留
索引數組刪除指定位置、需連續索引array_splice($arr, $offset, $len)重建
索引數組刪除特定值、需連續索引array_values(array_filter(...))重建
關聯數組刪除空值、保留鍵名array_filter($arr)保留
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved