PHP中如何删除数组中的元素?

2019-05-22 0 条评论 161 次阅读 2 人点赞

我们常常会有这样的疑问:

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

我认为设置它null会生效,但显然它有时候不起作用。

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

删除一个数组元素

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

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

\unset() 方法

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

代码:

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    \unset($array[1]);
                //↑ 你想删除的键
?>

结果

[
    [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);
                        //↑ 你想删除的
?>

结果:

[
    [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"]);
                               //└────────┘→你想删除的值
?>

结果:

[
    [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"]);
                                    //↑           ↑ 你想删除的键值
?>

结果:

[
    [1] => b
]

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

Kiwi

Valar Morghulis

文章评论(0)