问题

有一个简单的方法从PHP数组中删除一个元素,使 foreach($ array)不再包括该元素?

我认为将其设置为null将会这样做,但显然不是.



解决方法

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

Delete one array element

如果只想删除一个数组元素,可以使用 unset()或替代 array_splice()此外,如果你有值,不知道删除元素的键,你可以使用 array_search() 来获取密钥.

unset() method

请注意,当您使用 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() method

如果使用 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()相同,通过引用获取数组,这意味着您不想将这些函数的返回值分配给数组.

Delete multiple array elements

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

array_diff() method

如果您知道要删除的数组元素的值,则可以使用 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() method

如果您知道要删除的元素的键,则要使用 array_diff_key().在这里你必须确保你传递的键作为键在第二个参数,而不是值.否则,您必须使用 array_flip() < / a>.并且这里的键不会改变/ 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() 获取特定值的所有键,然后删除所有元素.




相关问题推荐