2014-11-02 48 views
1

甲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" 
); 
+0

为什么使用二进制形式你引用他们,而不是在你的数组键使用正常计数? – JammyDodger231 2014-11-02 21:42:53

+0

其实$ filter被存储为十进制。所以101101存储为45,而110001为35.这是一种排序方式。正常计数意味着什么? – 2014-11-02 22:16:50

回答

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

+0

是的,数组元素的数量总是与$ filter的长度相同。 – 2014-11-02 22:05:18

+0

然后这将为你工作。看看演示。 – 2014-11-02 22:05:53

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