过滤使用二进制
问题描述:
甲PHP数组有一个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"
);
答
假设的$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
)
+0
是的,数组元素的数量总是与$ filter的长度相同。 – 2014-11-02 22:05:18
+0
然后这将为你工作。看看演示。 – 2014-11-02 22:05:53
答
这应该为你工作:
<?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"
}
为什么使用二进制形式你引用他们,而不是在你的数组键使用正常计数? – JammyDodger231 2014-11-02 21:42:53
其实$ filter被存储为十进制。所以101101存储为45,而110001为35.这是一种排序方式。正常计数意味着什么? – 2014-11-02 22:16:50