PHP array delete by value (not key)

I have a PHP array as follows:

$messages = [312, 401, 1599, 3, ...];

I want to delete the element containing the value $del_val (for example, $del_val=401 ), but I don't know its key. This might help: each value can only be there once .

I'm looking for the simplest function to perform this task please.


Using array_search() and unset , try the following:

if (($key = array_search($del_val, $messages)) !== false) {
    unset($messages[$key]);
}

array_search() returns the key of the element it finds, which can be used to remove that element from the original array using unset() . It will return FALSE on failure, however it can return a false-y value on success (your key may be 0 for example), which is why the strict comparison !== operator is used.

The if() statement will check whether array_search() returned a value, and will only perform an action if it did.


Well, deleting an element from array is basically just set difference with one element.

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

It generalizes nicely, you can remove as many elements as you like at the same time, if you want.

Disclaimer: Note that my solution produces a new copy of the array while keeping the old one intact in contrast to the accepted answer which mutates. It might be a bit slower because of this.


One interesting way is by using array_keys() :

foreach (array_keys($messages, 401, true) as $key) {
    unset($messages[$key]);
}

The array_keys() function takes two additional parameters to return only keys for a particular value and whether strict checking is required (ie using === for comparison).

This can also remove multiple array items with the same value (eg [1, 2, 3, 3, 4] ).

链接地址: http://www.djcxy.com/p/9848.html

上一篇: “++”在PHP中意味着什么?

下一篇: 按数值删除PHP数组(不是键)