有一个php数组
$arr = array(
1 => "a",
2 => "b",
4 => "c",
8 => "d",
16 => "e",
32 => "f"
);
和二进制数
$filter=101101
我想过滤数组并仅保留二进制上各自值为1的键 对于这个例子,我会:
$arr = array(
1 => "a",
4 => "c",
8 => "d",
32 => "f"
);
或
$filter=110001
获取
$arr = array(
1 => "a",
2 => "b",
32 => "f"
);
答案 0 :(得分:0)
假设$filter
的长度始终与数组元素的数量相同:
$filter_arr = str_split($filter);
$new_arr = array();
$i = 0;
foreach ($arr as $key => $val) {
if ($filter_arr[$i] == 1) {
$new_arr[$key] = $val;
}
$i++;
}
使用您给定的数组,过滤等于101101,$new_arr
将等于:
Array
(
[1] => a
[4] => c
[8] => d
[32] => f
)
答案 1 :(得分:0)
这应该适合你:
<?php
$arr = array(
1 => "a",
2 => "b",
4 => "c",
8 => "d",
16 => "e",
32 => "f"
);
$filter=110001;
$filerValue = str_split($filter);
$count = 0;
foreach($arr as $k => $v) {
if($filerValue[$count] == 0)
unset($arr[$k]);
$count++;
}
var_dump($arr);
?>
输出:
array(3) {
[1]=>
string(1) "a"
[2]=>
string(1) "b"
[32]=>
string(1) "f"
}