回调函数返回 return($var & 1)?

new*_*bie 3 php bitwise-operators

我已经阅读了关于array_filter的 PHP手册

<?php
function odd($var)
{
    // returns whether the input integer is odd
    return($var & 1);
}

function even($var)
{
    // returns whether the input integer is even
    return(!($var & 1));
}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>
Run Code Online (Sandbox Code Playgroud)

即使我在这里看到结果:

Odd :
Array
(
    [a] => 1
    [c] => 3
    [e] => 5
)
Even:
Array
(
    [0] => 6
    [2] => 8
    [4] => 10
    [6] => 12
)
Run Code Online (Sandbox Code Playgroud)

但我不明白这一行:return($var & 1);有人可以解释一下吗?

Ale*_*der 5

你知道 &&AND,但你可能不知道的&有点明智 AND

&运营商工作在一个位水平,这是逐位。您需要考虑操作数的二进制表示。

例如

710 & 210 = 1112 & 0102 = 0102 = 210

例如,该表达式$var & 1用于测试最低有效位分别是10、奇数还是偶数。

$var & 1

010 & 110 = 0002 & 0012 = 0002 = 010 = false (even)

110 & 110 = 0012 & 0012 = 0012 = 110 = true  (odd)

210 & 110 = 0102 & 0012 = 0002 = 010 = false (even)

310 & 110 = 0112 & 0012 = 0012 = 110 = true  (odd)

410 & 210 = 1002 & 0012 = 0002 = 010 = false (even)

and so on...