在 PHP 中从数组中删除一个元素

问题描述

删除数组元素有多种方法,其中有些方法对某些特定任务比其他方法更有用。

删除单个数组元素

如果您只想删除一个数组元素,您可以使用unset()或者\array_splice().

如果您知道值并且不知道删除元素的键,您可以使用它\array_search()来获取键。这仅在元素不多次出现时才有效,因为\array_search仅返回第一次命中。

unset()

请注意,当您使用unset()数组键时不会改变。如果要重新索引可以使用\array_values()after的键unset(),这会将所有键转换为从 0 开始的数字枚举键。

代码:

$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
          // ↑ Key which you want to delete

输出:

[
    [0] => a
    [2] => c
]

\array_splice()方法

如果您使用\array_splice()这些键将自动重新索引,但关联键不会更改 - 与 相反\array_values(),它将所有键转换为数字键。

\array_splice()需要offset而不是key作为第二个参数。

代码:

$array = [0 => "a", 1 => "b", 2 => "c"];
\array_splice($array, 1, 1);
                   // ↑ Offset which you want to delete

输出:

[
    [0] => a
    [1] => c
]

array_splice(),和 一样unset(),通过引用获取数组。您不会将这些函数的返回值分配回数组。

删除多个数组元素

如果您想删除多个数组元素并且不想调用unset()\array_splice()多次调用,您可以使用函数\array_diff()\array_diff_key()取决于您是否知道要删除的元素的值或键。

\array_diff()方法

如果您知道要删除的数组元素的值,则可以使用\array_diff(). 和以前一样,unset()它不会更改数组的键。

代码:

$array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
$array = \array_diff($array, ["a", "c"]);
                          // └────────┘
                          // Array values which you want to delete

输出:

[
    [1] => b
]

\array_diff_key()方法

如果您知道要删除的元素的键,那么您要使用\array_diff_key(). 您必须确保将键作为第二个参数中的键而不是作为值传递。键不会重新索引。

代码:

$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
                               // ↑           ↑
                               // Array keys which you want to delete

输出:

[
    [1] => b
]

如果要使用unset()\array_splice()删除具有相同值的多个元素,可以使用\array_keys()获取特定值的所有键,然后删除所有元素。

解决方法

有没有一种简单的方法可以使用 PHP 从数组中删除一个元素,从而foreach ($array)不再包含该元素?

我认为将其设置为null可以做到这一点,但显然它不起作用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...