借用underscore.JS _.reject 的逻辑,创建了两个函数(人们更喜欢函数!!)
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;
});