📌  相关文章
📜  如何在PHP中按值非键执行数组删除?(1)

📅  最后修改于: 2023-12-03 15:08:55.988000             🧑  作者: Mango

如何在PHP中按值非键执行数组删除?

在PHP中,我们可以通过使用 unset() 函数来删除数组中的元素。但是,该函数是基于键名进行删除的。那么如何在按值非键执行数组删除呢?本文将为您介绍两种方法。

方法一:使用 array_search() 函数

array_search() 函数可以查找数组中是否存在指定值,如果存在就返回该元素的键名。我们可以使用这个特性来删除数组中的指定元素。

$my_array = array("apple", "orange", "banana", "apple");
$value = "apple";

$key = array_search($value, $my_array);
if ($key !== false) {
    unset($my_array[$key]);
}

print_r($my_array);

输出结果为:

Array
(
    [1] => orange
    [2] => banana
    [3] => apple
)

在上面的例子中,我们首先定义了一个包含多个相同元素的数组 $my_array,然后指定需要删除的值 $value"apple"

接着,我们使用 array_search() 函数来查找 $value 在数组中的位置,并将其返回的键名赋值给 $key 变量。

最后,我们通过 unset() 函数按键名删除了 $key 所对应的元素。注意,我们使用了 !== 运算符来判断 $key 是否等于 false,这是因为 array_search() 函数可能返回 0,如果使用 != 运算符会将其误判为 false

方法二:使用 array_filter() 函数

array_filter() 函数可以对数组中的每个元素应用一个回调函数,并返回满足条件的所有元素组成的新数组。我们可以使用这个函数来筛选出需要保留的元素,从而达到删除指定元素的效果。

$my_array = array("apple", "orange", "banana", "apple");
$value = "apple";

$my_array = array_filter($my_array, function($element) use ($value) {
    return ($element !== $value);
});

print_r($my_array);

输出结果为:

Array
(
    [1] => orange
    [2] => banana
)

在上面的例子中,我们首先定义了一个包含多个相同元素的数组 $my_array,然后指定需要删除的值 $value"apple"

接着,我们使用 array_filter() 函数筛选出所有不等于 $value 的元素并组成一个新数组,最后将其赋值给 $my_array 变量。

需要注意的是,我们在回调函数中使用了 use ($value) 的语法,将 $value 变量传递给了回调函数。这是因为 array_filter() 函数默认只传递数组元素作为回调函数的参数,无法直接获取外部变量的值。