我不知道是否有人问过类似的问题。有人可以解释在以下情况下作业是如何运作的:
$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 - 不能将标量值用作数组 - 在第6行 1
答案 0 :(得分:5)
您提供的前两个示例是使用字符串。字符串可以视为一个数组,字符可以通过整数位置访问。
在第三个示例中,您将gradle -Dprop=value
指定为没有要引用的字符位置的整数。
答案 1 :(得分:2)
以下数据结构支持数组解除引用:
array
string
(*)ArrayAccess
接口的对象。 (*)字符串不支持[]
运算符。
其他数据类型(例如integers)不支持它,并且因为字符串和数组都支持[n]
运算符,所以它不能被强制转换为其他类型
在您的示例中:
$a = "1"; $a[$a] = "2";
相当于:
$a = "1";
$a[(int)"1"] = "2"; // or $a[1] = "2";
答案 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
是整数,您不能像在字符串