А есть массив 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
)
Это должно работать для вас:
<?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"}