使用array_map

时间:2017-03-16 13:01:40

标签: php

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

2 个答案:

答案 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);