2014-11-02 77 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" 
    }