我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
当前回答
我认为最简单的方法是使用带有foreach循环的函数:
//This functions deletes the elements of an array $original that are equivalent to the value $del_val
//The function works by reference, which means that the actual array used as parameter will be modified.
function delete_value(&$original, $del_val)
{
//make a copy of the original, to avoid problems of modifying an array that is being currently iterated through
$copy = $original;
foreach ($original as $key => $value)
{
//for each value evaluate if it is equivalent to the one to be deleted, and if it is capture its key name.
if($del_val === $value) $del_key[] = $key;
};
//If there was a value found, delete all its instances
if($del_key !== null)
{
foreach ($del_key as $dk_i)
{
unset($original[$dk_i]);
};
//optional reordering of the keys. WARNING: only use it with arrays with numeric indexes!
/*
$copy = $original;
$original = array();
foreach ($copy as $value) {
$original[] = $value;
};
*/
//the value was found and deleted
return true;
};
//The value was not found, nothing was deleted
return false;
};
$original = array(0,1,2,3,4,5,6,7,4);
$del_val = 4;
var_dump($original);
delete_value($original, $del_val);
var_dump($original);
输出将是:
array(9) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
[5]=>
int(5)
[6]=>
int(6)
[7]=>
int(7)
[8]=>
int(4)
}
array(7) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[5]=>
int(5)
[6]=>
int(6)
[7]=>
int(7)
}
其他回答
如果你明确知道你的数组将只包含一个具有该值的元素,你可以这样做
$key = array_search($del_val, $array);
if (false !== $key) {
unset($array[$key]);
}
但是,如果您的值可能在数组中出现多次,则可以这样做
$array = array_filter($array, function($e) use ($del_val) {
return ($e !== $del_val);
});
注意:第二个选项只适用于带有闭包的PHP5.3+
最好的方法是array_splice
array_splice($array, array_search(58, $array ), 1);
最佳理由请访问http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-array-in-php/
这里有一个简单但可以理解的解决方案:
$messagesFiltered = [];
foreach ($messages as $message) {
if (401 != $message) {
$messagesFiltered[] = $message;
}
}
$messages = $messagesFiltered;
PHP 7.4或以上
function delArrValues(array $arr, array $remove) {
return array_filter($arr, fn($e) => !in_array($e, $remove));
};
如果你有数组as
$messages = [312, 401, 1599, 3];
你想从$messages数组中删除3,312, 你会这样做
delArrValues($messages, [3, 312])
它会返回
[401, 1599]
最好的部分是您可以轻松地过滤多个值,即使相同的值出现了多次。
你可以:
unset($messages[array_flip($messages)['401']]);
解释:在翻转数组后删除键为401的元素。