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]
).
上一篇: “++”在PHP中意味着什么?
下一篇: 按数值删除PHP数组(不是键)