soword科技言
永久公益免费API接口
提供永久免费的API接口,查看更多API接口,如果您有其他免费API资源,请联系我们,造福人类。
提供商务开发:小程序,系统,APP
定制开发,免费评估,免费咨询,价格便宜,售后保障,前往开发服务中心联系开发客服中心
从PHP中的数组中删除元素

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

我以为将它设置为null可以实现,但是显然不起作用。

我不会认为Konrad的答案是上述问题最简单的答案。随着unset()数组的迭代,将不再包含移除的值。OTOH,确实Stevan的答案很充分,实际上,这是我一直在寻找的答案-但不是OP :) 

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

删除一个数组元素

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

另外,如果您具有值并且不知道要删除元素的键,则可以使用\array_search()该键来获取键。

unset()

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

<?php
$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()需要偏移量,不是关键!作为第二个参数。

<?php
$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()它不会更改/重新索引数组的键。

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

输出量

[
[1] => b]

\array_diff_key() 方法

如果知道要删除的元素的键,则要使用\array_diff_key()在这里,您必须确保将键作为第二个参数中的键而不是值来传递。否则,您必须使用翻转数组\array_flip()而且这里的键不会更改/重新索引。

<?php
$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()获取特定值的所有键,然后删除所有元素。

应当指出,这unset()将保持索引不变,这是使用字符串索引(将数组作为哈希表)时所期望的,但是在处理整数索引数组时可能会非常令人惊讶:

$array = array(0, 1, 2, 3);unset($array[2]);var_dump($array);/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[3]=>
int(3)} */$array = array(0, 1, 2, 3);array_splice($array, 2, 1);var_dump($array);/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)} */

因此,array_splice()如果您想标准化整数键,可以使用它。另一种选择是array_values()在after之后使用unset()

$array = array(0, 1, 2, 3);unset($array[2]);$array = array_values($array);var_dump($array);/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)} */



2023-03-22 10:04:19

新人小程序+APP定制199元起


发放福利,助力中小企业发展,真正在互联网中受益

点击询问定制

广告服务展示