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

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

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


答案

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

删除一个数组元素

如果你想删除一个数组元素,你可以使用unset()或替代array_splice()

同样,如果你有这个值,并且不知道删除你可以array_search()用来获取密钥的元素的密钥。

unset() 方法

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

<?php

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

?>

产量

Array (
    [0] => a
    [2] => c
)

array_splice() 方法

如果您使用array_splice()的按键将被自动重新编制索引,但相关的按键不会改变array_values(),将所有按键转换为数字按键。

array_splice()作为第二个参数,还需要偏移量,而不是关键字!

<?php

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

?>

产量

Array (
    [0] => a
    [1] => c
)

array_splice()unset()通过引用获取数组相同,这意味着您不希望将这些函数的返回值分配回数组。

删除多个数组元素

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

array_diff() 方法

如果你知道你想要删除的数组元素的值,那么你可以使用array_diff()。与之前一样,unset()它不会更改/重新索引数组的键。

<?php

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

?>

产量

Array (
    [1] => b
)

array_diff_key() 方法

如果你知道你想删除的元素的键,那么你想使用array_diff_key()。在这里你必须确保你在第二个参数中传递键作为键,而不是作为值。否则,你必须翻转阵列array_flip()。而且这里的钥匙不会改变/ reindex。

<?php

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

产量

Array (
    [1] => b
)

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

Tags:,

添加评论

友情链接:蝴蝶教程