这项任务如何运作?

时间:2015-06-26 06:44:25

标签: php

我不知道是否有人问过类似的问题。有人可以解释在以下情况下作业是如何运作的:

$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

3 个答案:

答案 0 :(得分:5)

您提供的前两个示例是使用字符串。字符串可以视为一个数组,字符可以通过整数位置访问。

在第三个示例中,您将gradle -Dprop=value指定为没有要引用的字符位置的整数。

答案 1 :(得分:2)

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

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

其他数据类型(例如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是整数,您不能像在字符串

中那样将字符添加到下一个位置