我使用array_map来验证每个数组元素。如果它没有通过验证,则应从初始数组中删除它:
$array = (123, 456);
$array = array_map(function ($e){
if( !is_numeric($e) ){
unset($e);
return; //this way i get a NULL element
}
$return $e;
}, $array);
OUTPUT:array(3){[0] => int(523)[1] => int(555)[2] => NULL}
当然,我最后可以添加一些内容:
$array = array_filter($array, 'strlen');
但是有没有办法在array_map中执行此操作?
更新
关于这个问题,我忘了提一个案子。如果我想要取消整个数组,如果一个元素没有通过验证怎么办?可以用array_filter,array_map或其他任何东西来完成吗?我不想用for等循环遍历数组。
答案 0 :(得分:16)
我认为array_map不是为满足您的需求而设计的,因为它为数组的每个元素应用了一个回调。但是array_filter确实:
$array = array_filter($array, function($e) {
return is_numeric($e);
});
甚至更短:
$array = array_filter($array, 'is_numeric');
答案 1 :(得分:-1)
如果您想在array_map
中返回false,则可以应用array_filter
进行清理。
$stores = [];
$array = array_map(function ($store) {
if ($true) {
return [
'name' => $store['name'],
];
} else {
return false;
}
}, $stores);
array_filter($array);