使用 array_map 从数组中删除元素

Remove element from array using array_map

我使用 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 等遍历数组。

我认为 array_map is not designed for your needs, because it's apply a callback for each element of your array. But array_filter 是 :

$array = array_filter($array, function($e) {
    return is_numeric($e);
});

或更短:

$array = array_filter($array, 'is_numeric');

如果您想 return 在您的 array_map 中设置为 false,您可以应用 array_filter 来清理它。

$stores = [];

$array = array_map(function ($store) {
    if ($true) {
        return [
            'name' => $store['name'],
        ];
    } else {
        return false;
    }
}, $stores);

array_filter($array);