Фильтрация массива 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");

1

Решение

Предполагая, что длина $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

Другие решения

Это должно работать для вас:

<?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"}
0