php按位与条件匹配算法

在条件固定的前提下,传参想匹配多个条件,可以使用按位与进行匹配,具体如下:
<?php 

$ary = array(
	//有未付订单
    '有未付订单 __PAY_CODE        '=> 0x00000001,
    //备注和留言
    '备注和留言 __FLAG_CODE       '=> 0x00000002,
    //物流公司标记
    '物流公司标记 __LOGI_CODE       '=> 0x00000004,
    //产品不匹配
    '产品不匹配 __PRODUCT_CODE    '=> 0x00000008,
    //用户多订单
    '用户多订单 __MEMBER_CODE     '=> 0x00000010,
    //乡村物流标记
    '乡村物流标记 __LOGI_LITE_CODE  '=> 0x00000020,
    //单订单
    '单订单 __SINGLE_CODE     '=> 0x00000040,
    //多订单
    '多订单 __MUTI_CODE       '=> 0x00000080,
    //仓库
    '仓库 __BRANCH_CODE     '=> 0x00000100,
    //库存
    '库存 __STORE_CODE      '=> 0x00000200,
    //异常
    '异常 __ABNORMAL_CODE   '=> 0x00000400,
    //单订单且有备注
    '单订单且有备注 __EXAMINE_CODE    '=> 0x00000800,
    //超卖订单
    '超卖订单 __OVERSOLD_CODE   '=> 0x00001000,
  //淘宝订单优惠中有赠品信息		
    '淘宝订单优惠中有赠品信息 __PMTGIFT_CODE    '=> 0x00002000,
    '淘宝订单优惠中有赠品信息 __COMBINE_CODE    '=> 0x00004000,
    //CRM赠品信息
    'CRM赠品信息 __CRMGIFT_CODE    '=> 0x00008000,
    //检测订单是否开发票
    '检测订单是否开发票 __TAX_CODE        '=> 0x00010000,
    //检查物流到不到
    '检查物流到不到 __LOGIST_ARRIVED 	'=> 0x00040000,

);

$testnum = $_GET['num'];
$html = "<table style='border:1px solid #e0e0e0;'><tr><td>序号</td><td>目标</td><td>&</td><td>状态码</td><td>结果</td><td>匹配结果(红色)</td></tr>";
$index =1;
foreach ($ary as $key => $value) {
	$result = $value & $testnum;
	$color = '';
	if ($result > 0) {
		$color = "style='color:red;'";
	}
	$html .= "<tr><td>".$index."</td><td>" . $testnum. "(".decbin($testnum).")</td><td>&</td><td>" . $value. "(".decbin($value).")</td><td>" . $result. "(".decbin($result).")</td><td ".$color.">". $key ."</td></tr>";
	$index++;
}
echo $html."</table>";




测试:将上面的代码保存为test.php ,并放入运行环境, 在浏览器中输入
localhost/test.php?num=12


你会看到结果



其中红色的为匹配上的条件。
以二级制来进行与运算,利用相同位上为1来进行匹配


如有不足, 欢迎指正。共同学习,共同进步。




猜你喜欢

转载自lxmgfd.iteye.com/blog/2386254