def*_*754 4 php arrays element undefined
当调用数组的未定义元素时,它向我显示另一个已定义元素的值.
数组结构示例:
$array = array(
'a' => array(
'b' => 'c'
)
);
Run Code Online (Sandbox Code Playgroud)
当使用echo命令时,$array['a']['b']['x']它显示我的值'c'.为什么会发生这种情况我真的不明白,因为$array['a']['b']['x']没有定义.
然后当我尝试使用命令添加另一个值时$array['a']['b']['x'] = 'y';
它正在重写$array['a']['b']to 的值'y'
不知怎的,我真的不明白这种行为,有人可以解释这是怎么可能的?然后,我将如何创建一个新的字符串值,$array['a']['b']['x'] = 'xyz'以不覆盖$array['a']['b']?
它实际上与数组无关.这是一个字符串问题.
在PHP中,您可以使用数组表示法访问和修改字符串的字符.考虑这个字符串:
$a = 'foo';
Run Code Online (Sandbox Code Playgroud)
$a[0]给你第一个字符(f),$a[1]第二个字符等等.
以这种方式分配字符串将使用新字符串的第一个字符替换现有字符,因此:
$a[0] = 'b';
Run Code Online (Sandbox Code Playgroud)
导致$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');
Run Code Online (Sandbox Code Playgroud)
这将导致:
$array = array(
'a' => array(
'b' => array(
0 => 'c',
'x' => 'xyz'
)
)
);
Run Code Online (Sandbox Code Playgroud)
进一步阅读: