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

时间:2011-04-27 11:59:09

标签: php arrays element undefined

当调用数组的未定义元素时,它向我显示另一个已定义元素的值。

数组结构示例:

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

1 个答案:

答案 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'
     )
  )
);

进一步阅读: