<?php
$arr = [1, 3, 5, 7, 8];
$key = array_search(3, $arr); // 1
if ($key !== false) array_splice($arr, $key, 1);
var_dump($arr);
/* 輸出:
array(4) {
[0]=> int(1)
[1]=> int(5)
[2]=> int(7)
[3]=> int(8)
}
*/
?>
特點:重新排序數字索引,刪除後陣列連續 0..n-1。
<?php
$arr = [1, 3, 5, 7, 8];
foreach ($arr as $k => $v) {
if ($v === 3) unset($arr[$k]);
}
var_dump($arr);
/* 輸出:
array(4) {
[0]=> int(1)
[2]=> int(5) // 索引 1 消失,跳到 2
[3]=> int(7)
[4]=> int(8)
}
*/
?>
特點:保留原鍵名,產生「稀疏陣列」。
| 需求 | 推薦 |
|---|---|
需連續索引、後續用 for 迴圈 | array_splice |
| 鍵名有業務含義(如 ID)、需保留關聯 | unset |
| 關聯陣列(字串鍵) | unset(array_splice 不支援字串鍵) |
| 大量刪除、效能敏感 | unset 較快(無重建) |
$arr = array_values($arr); // 將稀疏陣列壓縮為 0..n-1
// 刪除所有值為 3 的元素
$arr = array_filter($arr, fn($v) => $v !== 3); // 保留索引
$arr = array_values(array_filter($arr, fn($v) => $v !== 3)); // 重新索引