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

Php 带花括号的类似数组的语句-目的是什么?,php,Php,我在网上找到了这段代码,我想知道它的作用是什么: $k[$i] = ord($key{$i}) & 0x1F; 我知道ord()返回一个ASCII值,但我不清楚花括号的作用是什么$key{$I},以及它的作用是什么 这是关于引用变量的值 在您的示例中,如果$i等于123,则 $k[$i] = ord($key{$i}) & 0x1F; 将与 $k[123] = ord($key[123]) & 0x1F; 问题的第二部分:“&”符号 &是一个二进制运算符。查看更多。

我在网上找到了这段代码,我想知道它的作用是什么:

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

我知道
ord()
返回一个ASCII值,但我不清楚花括号的作用是什么
$key{$I}
,以及它的作用是什么

这是关于引用变量的值

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

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

$k[123] = ord($key[123]) & 0x1F;
问题的第二部分:“&”符号


&
是一个二进制运算符。查看更多。如果在两个变量中都设置了位,则会设置位。

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

 $str{1} == $str[1]
信息框中简要提到了这一点:

另外,官方宣布它已被弃用。在手册中,它被认为是时断时续的弃用,但即使不常见,它仍然是非常有效的语法



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

&0x1F
是一种位操作,用于“规范化”字符、颜色等的值,这些值被放入十六进制,但不一定“读取”相同。阅读更多关于

相当于

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

0xff & 0x1f
导致

0x1f
00011111

导致

0x1f
00011111

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

注意:方括号和大括号都可以互换使用来访问数组元素(例如,$array[42]和$array{42}在上面的示例中都可以执行相同的操作)

资料来源:

两者都是完全有效的;不推荐使用大括号

关于“&0x1F”,其他人,如@Tadek,已作出回应:

&是一个二进制运算符。请参阅文档[]中的更多信息。如果在两个变量中都设置了位,则设置位


考虑从你自己的答案中删除对其他答案的评论。我已经编辑了这个答案来删除你对被接受的答案的评论(这可能不总是被接受的答案)。如果你认为他们是正确的,考虑下投票和/或评论其他答案。如果你没有足够的声誉发表评论,就让你的答案自己说出来吧。谢谢你的评论和编辑。由于我对造成堆栈溢出还不熟悉,我很欣赏这些指针。这个答案是不准确的。事实上,正如我在回答中所解释的,花括号语法是方括号语法的一个完全有效的(不是不推荐的)替代方法。mario链接到的引用只是强调了我的观点——这两种形式是等价的。@Ochado很好。这已经不重要了。以前版本的手册确实如此,在6.0之前也有一次,如图所示。因此,更好的复制:(我个人也一直在秘密地使用
{1}
语法进行装饰,顺便说一句)索引不需要仅仅是数字。PHP将自动进行转换。@Pacerier:我想我是想暗示一下。但你是对的;它更像是一个用于字符串标记的自定义int-cast/cut