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