调用未定义的数组元素将显示另一个已定义元素的值

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']

Fel*_*ing 5

它实际上与数组无关.这是一个字符串问题.

在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';刚刚从改变性格cy.

如果你有一个较长的字符串,如'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)

进一步阅读: