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即为奇数)。
综上所述,&和&&在意义上有一定的类似性,即同真为真,同假为假,一真一假为假。不同的是,&的判断需要转化为二进制以后,分别对每一位进行“&&”判段。
转载请注明出处。