使用二进制过滤php数组

时间:2014-11-02 21:37:42

标签: php arrays binary filtering

有一个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"
);

2 个答案:

答案 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
)

See demo

答案 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"
    }