PHP

浅谈php中"&"符号和函数array_fifter函数的使用

作者:taoyongjun 来源:web交流网 2016-05-24 23:37 浏览:0 我要评论(0)

PHPer进行开发时,逻辑判断符号 "&& "的使用十分频繁。但是跟它长得很像的&,不仅使用频率低,而且对其语义解释-按位与的理解也很模糊,本文将结合函数array_fifter进行说明。

       小编之前也没有使用过”&“符号,也没见过使用的场合,只记得字面解释是“按位与”。直到有一天操作数组时,需要剔除不符合条件的元素,意识到遍历数组对元素操作在代码上并不“经济”,虽然效率影响不大。于是找到了array_fifter函数。
      php手册中对函数array_fifter的解释:                         array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ),依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。其举例如下:
       $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
       function odd($var)
       {
           return($var & 1);
        }
       print_r(array_filter($array1, "odd"));
       返回结果如下:
Array([a] => 1,[c] => 3,[e] => 5)。 结合结果和array_fifter函数的使用不难看出,odd函数的功能是判断奇数,若变量$var为奇数,函数返回true。return($var & 1)是什么意思呢?为什么“奇数”&1就能返回true? 所谓“按位与”,是指转化为二进制以后的分别每一位都进行“&&”运算。 例如7&1(下标表示进制,010表示10进制的0,12表示二进制的1):转化为二进制以后: 710 = 1*2^2+1*2^1+1*2^0 = 1112 ;110=0012(0并没有具体意义,在此只是为了让位数与前面相等)。

710 & 110 = 1112 & 0012,所谓按位与,是指分别对每一位进行二进制的和进行逻辑运算。
1&&0 = 0;
1&&0 = 0;
1&&1 = 1;
所以
710 & 110 = 1112 & 0012=0012=1,在公式中返回true。(其实,快捷方式就是将要判断的数转化为二进制以后,如何将转化为二进制在此不进行赘述。如果二进制数的末位不为0即为奇数)。
综上所述,&和&&在意义上有一定的类似性,即同真为真,同假为假,一真一假为假。不同的是,&的判断需要转化为二进制以后,分别对每一位进行“&&”判段。


转载请注明出处。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • win10系统下Apache80端口冲突的解决办法

    win10系统下Apache80端口冲突的解决办法

    2016-05-02

  • 怎样用手机访问自己编写的网页

    怎样用手机访问自己编写的网页

    2016-05-02

  • 防止sql注入,对单引号、双引号、 反斜 转义

    防止sql注入,对单引号、双引号、 反斜 转义

    2016-05-06

  • PHP取整,四舍五入取整、向上取整、向下取整、小数截取。

    PHP取整,四舍五入取整、向上取整、向下取整、小数截取。

    2016-05-09

  • php中序列化与反序列化

    php中序列化与反序列化

    2016-05-27

网友点评
评论(已有0条评论)
还没有评论,快来抢沙发吧!
新闻
  • 新闻
  • 软件
精彩导读