在php的实际开发中,数组是最常用的数据结构之一,很多时候我们需要对数组进行元素删除操作,尤其是删除数组中某一个指定的值。不同的数组类型、不同的删除需求对应不同的实现方法,下面来逐一介绍常用的实现技巧。

使用unset函数删除指定值
如果知道要删除的值对应的数组键名,或者可以先获取到键名,那么使用unset函数是最直接的方式。unset函数会销毁指定的变量,用在数组上可以删除对应的元素,不会重置数组的索引。
示例代码如下:
<?php
// 定义一个索引数组
$arr = [10, 20, 30, 40, 50];
// 查找要删除的值20对应的键名
$key = array_search(20, $arr);
// 如果找到键名就使用unset删除
if ($key !== false) {
unset($arr[$key]);
}
// 输出结果,键名会保留原索引
print_r($arr);
// 输出:Array ( [0] => 10 [2] => 30 [3] => 40 [4] => 50 )
?>
注意array_search返回的是第一个匹配的键名,如果要删除关联数组中的值,同样可以先获取键名再删除:
<?php // 定义关联数组 $user = ['name' => '张三', 'age' => 25, 'city' => '北京']; // 删除city对应的值 unset($user['city']); print_r($user); // 输出:Array ( [name] => 张三 [age] => 25 ) ?>
使用array_diff函数删除指定值
array_diff函数用于计算数组的差集,返回在第一个数组中但不在其他数组中的值。我们可以利用这个特性,将要删除的值放到第二个数组中,从而得到删除后的新数组,这个方法会重置索引数组的索引。
示例代码如下:
<?php $arr = [10, 20, 30, 20, 40]; // 删除值为20的元素,会删除所有等于20的元素 $newArr = array_diff($arr, [20]); // 输出结果,索引会被重置 print_r($newArr); // 输出:Array ( [0] => 10 [1] => 30 [2] => 40 ) ?>
这个方法适合需要删除数组中所有等于指定值的场景,而且不需要关心原数组的索引,因为它会返回新的索引数组。
使用array_filter函数过滤指定值
array_filter函数用回调函数过滤数组的元素,保留回调函数返回true的元素。我们可以自定义回调函数来排除指定的值,这个方法同样可以重置索引,也支持复杂的条件判断。
示例代码如下:
<?php
$arr = [10, 20, 30, 40, 50];
// 过滤掉值为20的元素,使用array_values重置索引
$newArr = array_values(array_filter($arr, function($val) {
return $val != 20;
}));
print_r($newArr);
// 输出:Array ( [0] => 10 [1] => 30 [2] => 40 [3] => 50 )
?>
如果需要删除多个不同的值,也可以修改回调函数的判断逻辑,比如return !in_array($val, [20, 30]);就可以同时删除20和30两个值。
使用array_splice函数删除索引数组的指定值
如果是索引数组,并且需要删除指定位置的元素同时保持数组的连续性,可以使用array_splice函数。这个函数会删除数组中指定位置的元素,并且会重新排列后续元素的索引。
示例代码如下:
<?php
$arr = [10, 20, 30, 40, 50];
// 查找要删除的值20的键名
$key = array_search(20, $arr);
if ($key !== false) {
// 从$key位置开始删除1个元素
array_splice($arr, $key, 1);
}
print_r($arr);
// 输出:Array ( [0] => 10 [1] => 30 [2] => 40 [3] => 50 )
?>
注意array_splice会直接修改原数组,而且只适合索引数组使用,用在关联数组上可能会导致键名丢失。
不同方法的适用场景对比
| 方法 | 适用数组类型 | 是否重置索引 | 是否修改原数组 | 特点 |
|---|---|---|---|---|
| unset | 索引数组、关联数组 | 否 | 是 | 直接删除指定键名元素,保留原键名 |
| array_diff | 索引数组 | 是 | 否,返回新数组 | 可删除所有匹配值,操作简单 |
| array_filter | 索引数组、关联数组 | 需配合array_values | 否,返回新数组 | 支持复杂过滤条件 |
| array_splice | 索引数组 | 是 | 是 | 保持数组连续性,适合索引数组删除 |
在实际开发中,我们可以根据数组类型和具体需求选择合适的方法,比如关联数组删除值优先用unset,索引数组需要重置索引可以用array_diff,需要复杂过滤条件就用array_filter。
phparray_filterunsetarray_diffarray_splice修改时间:2026-06-26 21:39:33