这个任务是如何工作的?

6
我不知道是否有类似的问题被问过。有人能否解释以下情况下如何工作分配:
$a = "1"; $a[$a] = "2"; echo $a;

这将输出:12

$a = "1"; $a[$a] = 2; echo $a;

这将输出:12。
$a = 1; $a[$a] = 2; echo $a;

这将输出:E_WARNING: 类型2--无法使用标量值作为数组--位于第61行。
3个回答

5
你提供的前两个例子都使用了字符串。字符串可以当作数组来处理,通过它们的整数位置来访问字符。
在第三个例子中,你将$a赋值为一个整数,这个整数没有字符位置可以引用。

2
以下数据结构支持数组解引用:

(*) 字符串不支持[]运算符。

其他数据类型(如整数)不支持它,因为字符串和数组都支持[n]运算符,所以不能强制转换为另一种类型。

在您的示例中:

$a = "1"; $a[$a] = "2";

等同于:

$a = "1"; 
$a[(int)"1"] = "2"; // or $a[1] = "2";

1

您正在构建字符串,第一和第二种情况:

$a = "1"; //string with "1" character on index 0

$a[$a] = "2"; //on second index you put "2". The equivalent of the following:

$a[1]="2" 
$a{1}="2" 
$a[1]=2 
$a{1}=2;

当您将其用作字符串时,2 被转换为字符串,这就是为什么情况1和情况2给出相同结果的原因。
类似地,在第一种情况中,由于您使用 "1" 字符串作为索引,在 $a[$a] 中它被转换为整数。
在最后一种情况中,$a 是整数,您不能像字符串那样添加字符到下一个位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接