带有大括号的类似数组的语句 - 目的是什么?

时间:2011-05-25 19:03:05

标签: php

我在网上发现了这段代码,我想知道它的作用:

$k[$i] = ord($key{$i}) & 0x1F;

我知道ord()会返回一个ASCII值,但我不清楚大括号的作用$key{$i}以及& 0x1F的作用。

4 个答案:

答案 0 :(得分:8)

这不是数组语法。它仅用于从字符串访问单个字符。索引必须是数字。

 $str{1} == $str[1]

此处在信息框中简要提及:http://www.php.net/manual/en/language.types.string.php#language.types.string.substr

此外,它已正式宣布弃用。手册中已经开启和关闭了所谓的弃用,但如果不常见,语法仍然非常有效。


& 0x1F是一个明智的AND。在这种情况下,它将十进制值限制为0到31。

答案 1 :(得分:3)

问题的第一部分:花括号

这是关于引用变量的值。

在您的示例中,如果$i等于123,那么

$k[$i] = ord($key{$i}) & 0x1F;

相同
$k[123] = ord($key[123]) & 0x1F;

问题的第二部分:'&'登录

&是二元运算符。查看更多in the documentation。如果在两个变量中都设置了它,它会设置位。

答案 2 :(得分:3)

在PHP中,[方括号]或{花括号}是完全合法的,可互换的访问数组的方式:

  

注意:方括号和花括号可以互换使用以访问数组元素(例如$ array [42]和$ array {42}在上面的例子中都会做同样的事情)。

来源:http://www.php.net/manual/en/language.types.array.php

两者都完全有效;花花括号不会弃用。

关于“& 0x1F”,其他像@Tadek的回复:

  

&安培;是一个二元运算符。请参阅文档[http://www.php.net/manual/en/language.operators.bitwise.php]中的更多内容。如果在两个变量中都设置了它,它会设置位。

答案 3 :(得分:2)

& 0x1F是一个逐位操作,用于“标准化”字符,颜色等的值,这些值被放入十六进制但不一定“读”相同。详细了解Wikipedia here

& 0x1f

相当于

& 00011111

这可以有效地将任何字节大小的值的前三位设置为0。

0xff & 0x1f

结果

0x1f

11111111 & 00011111

结果

00011111