我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
当前回答
或者简单地说,手动方式:
foreach ($array as $key => $value){
if ($value == $target_value) {
unset($array[$key]);
}
}
这是最安全的,因为你可以完全控制你的阵列
其他回答
使用array_search()和unset,尝试以下操作:
if (($key = array_search($del_val, $messages)) !== false) {
unset($messages[$key]);
}
Array_search()返回它找到的元素的键,可以使用unset()从原始数组中删除该元素。它将在失败时返回FALSE,但在成功时返回FALSE -y值(例如,您的键可能为0),这就是使用严格比较操作符!==的原因。
if()语句将检查array_search()是否返回值,如果返回值,则只执行操作。
或者简单地说,手动方式:
foreach ($array as $key => $value){
if ($value == $target_value) {
unset($array[$key]);
}
}
这是最安全的,因为你可以完全控制你的阵列
我知道这一点效率都没有,但它简单、直观、易于阅读。 因此,如果有人正在寻找一个不那么花哨的解决方案,可以扩展到更多的值,或更具体的条件。这是一个简单的代码:
$result = array();
$del_value = 401;
//$del_values = array(... all the values you don`t wont);
foreach($arr as $key =>$value){
if ($value !== $del_value){
$result[$key] = $value;
}
//if(!in_array($value, $del_values)){
// $result[$key] = $value;
//}
//if($this->validete($value)){
// $result[$key] = $value;
//}
}
return $result
根据您的要求“每个值只能出现一次”,如果您只是想在数组中保持唯一的值,那么array_unique()可能就是您正在寻找的。
输入:
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);
结果:
array(2) {
[0] => int(4)
[2] => string(1) "3"
}
你可以:
unset($messages[array_flip($messages)['401']]);
解释:在翻转数组后删除键为401的元素。