在PHP中从数组中删除元素

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

我原以为将它设置为null就可以了,但显然不起作用

删除数组元素有不同的方法,其中一些方法对于某些特定任务比其他方法更有用

删除单个数组元素

如果只想删除一个数组元素,可以使用unset()\array\u splice()

如果知道值但不知道删除元素的键,则可以使用\array\u search()获取键。这仅在元素不出现多次时有效,因为\array\u search仅返回第一次命中

unset()

请注意,使用unset()时,数组键不会更改。如果要重新索引键,可以在unset()之后使用\array\u values(),将所有键转换为从0开始的数字枚举键

代码:

$array=[0=>a",1=>b",2=>c"];
未设置($array[1]);
// ↑ 要删除的密钥

输出:

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

\array\u splice()方法

如果使用\array\u splice()键将自动重新编制索引,但关联键不会更改-与将所有键转换为数字键的\array\u values()相反

\array\u splice()需要偏移量,而不是,作为第二个参数

代码:

$array=[0=>a",1=>b",2=>c"];
\阵列拼接($array,1,1);
// ↑ 要删除的偏移量

输出:

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

array\u splice(),与unset()相同,通过引用获取数组。您不会将这些函数的返回值赋回数组

删除多个数组元素

如果要删除多个数组元素并且不想多次调用unset()\array\u splice(),则可以使用函数\array\u diff()\array\u diff\u key(),具体取决于您是否知道要删除的元素的值或键

\array\u diff()方法

如果知道要删除的数组元素的值,则可以使用\array\u diff()。与前面的unset()一样,它不会更改数组的键

代码:

$array=[0=>a",1=>b",2=>c",3=>c"];
$array=\array差异($array,["a","c"]);
// └────────┘
//要删除的数组值

输出:

[
[1] =>b
]

\array\u diff\u key()方法

如果知道要删除的元素的键,则需要使用\array\u diff\u key()。必须确保将键作为第二个参数中的键传递,而不是作为值传递。钥匙不会重新编制索引

代码:

$array=[0=>a",1=>b",2=>c"];
$array=\array差异键($array,[0=>xy",“2"=>xy"]);
// ↑           ↑
//要删除的数组键

输出:

[
[1] =>b
]

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

发表评论