PHP滤波器阵列由另一真/假阵列
问题描述:
我有此数组:PHP滤波器阵列由另一真/假阵列
$arr_to_filter = array(1, 3, 5, 7, 10, 12, 15);
$filter = array(0, 1, 1, 0, 1);
预期结果:
Array (
[0] => 3
[1] => 5
[2] => 10
)
我可以通过这个循环实现这一目标:
$arr_to_filter = array(1, 3, 5, 7, 10, 12, 15);
$filter = array(0, 1, 1, 0, 1);
$output_array = array();
foreach($arr_to_filter as $key=>$val) {
if(isset($filter[$key]) && $filter[$key]) {
$output_array[] = $val;
}
}
print_r($output_array);
灿我使用内置函数如array_filter或另一种内置函数来实现此功能,而不使用循环?
答
如果你使用PHP> = 5.6,则可以利用array_filter()
的第三个参数,让您与您的过滤规则匹配关键字:
$arr_to_filter = array(1, 3, 5, 7, 10, 12, 15);
$filter = array(0, 1, 1, 0, 1);
$result = array_filter(
$arr_to_filter,
function($key) use ($filter) {
return !empty($filter[$key]);
},
ARRAY_FILTER_USE_KEY
);
var_dump($result);
如果您使用的是较早版本PHP的,那么你就需要过滤的钥匙,和相交该结果对原来的数组:
$result = array_intersect_key(
$arr_to_filter,
array_filter(
array_keys($arr_to_filter),
function($key) use ($filter) {
return !empty($filter[$key]);
}
)
);
如果你想后了上述两种方法的键复位,然后只使用array_values()
答
使用该溶液array_map
,array_slice
array_reduce
和功能:
$filtered = array_reduce(array_map(null, array_slice($arr_to_filter, 0, count($filter)), $filter),
function($r, $a){
if ($a[1]) $r[] = $a[0];
return $r;
}, []);
print_r($filtered);
输出:
Array
(
[0] => 3
[1] => 5
[2] => 10
)
+0
谢谢@RomanPerekhrest。 有用的解决方案 – semsem
+1
@semsem,实际上,在这种情况下,您的“foreach”循环方法并不那么糟糕 – RomanPerekhrest
“内置在像数组函数_ ***” 与环制成。 –