我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
当前回答
function array_remove_by_value($array, $value)
{
return array_values(array_diff($array, array($value)));
}
$array = array(312, 401, 1599, 3);
$newarray = array_remove_by_value($array, 401);
print_r($newarray);
输出
Array ([0] => 312 [1] => 1599 [2] => 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/
借用了underscore.JS _的逻辑。拒绝并创建了两个函数(人们更喜欢函数!!)
array_reject_value:该函数简单地拒绝指定的值(也适用于PHP4,5,7)
function array_reject_value(array &$arrayToFilter, $deleteValue) {
$filteredArray = array();
foreach ($arrayToFilter as $key => $value) {
if ($value !== $deleteValue) {
$filteredArray[] = $value;
}
}
return $filteredArray;
}
array_reject:这个函数只是拒绝可调用方法(适用于PHP >=5.3)
function array_reject(array &$arrayToFilter, callable $rejectCallback) {
$filteredArray = array();
foreach ($arrayToFilter as $key => $value) {
if (!$rejectCallback($value, $key)) {
$filteredArray[] = $value;
}
}
return $filteredArray;
}
所以在我们当前的例子中,我们可以像下面这样使用上述函数:
$messages = [312, 401, 1599, 3, 6];
$messages = array_reject_value($messages, 401);
或者甚至更好:(因为这给了我们更好的语法使用,比如array_filter)
$messages = [312, 401, 1599, 3, 6];
$messages = array_reject($messages, function ($value) {
return $value === 401;
});
上面的代码可以用于更复杂的事情,比如我们想要删除所有大于或等于401的值,我们可以简单地这样做:
$messages = [312, 401, 1599, 3, 6];
$greaterOrEqualThan = 401;
$messages = array_reject($messages, function ($value) use $greaterOrEqualThan {
return $value >= $greaterOrEqualThan;
});
要删除多个值,试试这个:
while (($key = array_search($del_val, $messages)) !== false)
{
unset($messages[$key]);
}
一个有趣的方法是使用array_keys():
foreach (array_keys($messages, 401, true) as $key) {
unset($messages[$key]);
}
array_keys()函数接受两个额外的参数,只返回特定值的键,以及是否需要严格检查(即使用===进行比较)。
这也可以删除具有相同值的多个数组项(例如[1,2,3,3,4])。
如果你不知道它的键,那就意味着它无关紧要。
你可以将值作为键,这意味着它会立即找到值。比在所有元素中反复搜索要好。
$messages=array();
$messages[312] = 312;
$messages[401] = 401;
$messages[1599] = 1599;
$messages[3] = 3;
unset($messages[3]); // no search needed