Php 使用数组映射从数组中删除元素

Php 使用数组映射从数组中删除元素,php,Php,我使用数组映射来验证每个数组元素。如果未通过验证,应将其从初始阵列中删除: $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); 输出:数组(3){[0]=>int(523)[1]=>int

我使用数组映射来验证每个数组元素。如果未通过验证,应将其从初始阵列中删除:

$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);
输出:数组(3){[0]=>int(523)[1]=>int(555)[2]=>NULL}

当然,我可以在结尾添加如下内容:

$array = array_filter($array, 'strlen');
但是在array_map中没有这样做的方法吗

更新

关于这个问题,我忘了提一个案例。如果有一个元素未通过验证,我想取消设置整个数组,该怎么办?这可以通过数组\过滤器、数组\映射或任何其他方式完成吗?我不想使用for等循环遍历数组。

我认为这不是为满足您的需要而设计的,因为它需要为数组的每个元素应用回调。但是:

甚至更短:

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

如果您想在
数组_映射中返回false
,则可以应用
数组_过滤器
将其清除

$stores = [];

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

array_filter($array);

array\u-map()
是遍历每个数组元素,而不是过滤数组。
array\u-filter()
擅长过滤数组array\u-filter-使用回调函数过滤数组的元素vs-array\u-map-将回调应用于给定数组的元素一个是评估一个是映射(转换)@彼得科斯:我不认为谁来回答这个问题有什么大不了的,只要你能多了解一些情况;)脏标志和循环是您在这里的最佳选择。
array\u map
array\u filter
都是循环。关于这个问题,我忘了提一个例子。如果有一个元素未通过验证,我想取消设置整个数组,该怎么办?这可以通过数组\过滤器、数组\映射或任何其他方式完成吗?我不想使用for等循环遍历数组。您可以在调用
array\u filter
后将新数组的长度与初始数组的长度进行比较,如果它们不匹配,则将其重置。使用array\u filter时要小心,因为如果从数组的中间移除一个元素,并在例如json_encode中使用它,它将把数组转换成一个关联对象{“0”:{},“2”:{}…}。要修复此问题,请使用数组_值重新索引数组
$stores = [];

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

array_filter($array);