当调用数组的未定义元素时,它向我显示另一个已定义元素的值。
数组结构示例:
$array = array(
'a' => array(
'b' => 'c'
)
);
在$array['a']['b']['x']
上使用echo命令时,它显示'c'
的值。为什么会发生这种情况我真的不明白,因为$array['a']['b']['x']
没有定义。
然后当我尝试使用命令$array['a']['b']['x'] = 'y';
添加另一个值时
它会将$array['a']['b']
的值重写为'y'
不知怎的,我真的不明白这种行为,有人可以解释这是怎么可能的?那我怎么能在$array['a']['b']['x'] = 'xyz'
创建一个新的字符串值来覆盖$array['a']['b']
?
答案 0 :(得分:5)
它实际上与数组无关。这是一个字符串问题。
在PHP中,您可以access and modify characters of a string with array notation。考虑一下这个字符串:
$a = 'foo';
$a[0]
为您提供第一个字符(f
),第二个字符为$a[1]
,依此类推。
以这种方式分配字符串将使用新字符串的第一个字符替换现有字符,因此:
$a[0] = 'b';
结果$a
为'boo'
。
现在你要做的是传递一个字符 'x'
作为索引。 PHP解析为索引0
(在字符串中传递数字,如'1'
,将按预期工作(即访问第二个字符))。
在您的情况下,字符串只包含一个字符(c
)。因此,调用$array['a']['b']['x'] = 'y';
与$array['a']['b'][0] = 'y';
相同,只会将字符从c
更改为y
。
如果您使用较长的字符串,例如'foo'
,$array['a']['b']['x'] = 'y';
会导致$array['a']['b']
的值为'yoo'
。
您无法在不覆盖的情况下为$array['a']['b']
分配新值。变量只能存储一个值。您可以做的是将数组分配给$array['a']['b']
并捕获先前的值。例如。你可以这样做:
$array['a']['b'] = array($array['a']['b'], 'x' => 'xyz');
将导致:
$array = array(
'a' => array(
'b' => array(
0 => 'c',
'x' => 'xyz'
)
)
);
进一步阅读: