刪除數組元素兩大函數行為迥異:unset() 保留原鍵名(產生「稀疏數組」),array_splice() 重建數字索引(生成「稠密數組」)。
$arr = ['a', 'b', 'c', 'd'];
unset($arr[1]); // 刪除 'b'
print_r($arr);
/* 輸出:
Array
(
[0] => a
[2] => c // 鍵名 2 保留,無 1
[3] => d
)
*/
array_values($arr) 重建索引。$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,返回被刪除元素組成的數組。$arr2 = [1, 3, 5, 7, 8];
foreach ($arr2 as $key => $value) {
if ($value === 3) unset($arr2[$key]);
}
var_dump($arr2); // 保留原鍵名
$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) | 保留 |