微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

数组结构示例:

  $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’] ?

解决方法:

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

PHP中你可以access and modify characters of a string with array notation.考虑这个字符串:

$a = 'foo';

$a [0]给你第一个字符(f),$a [1]给你第二个等等.

以这种方式分配字符串将使用新字符串的第一个字符替换现有字符,因此:

$a[0] = 'b';

结果是$a’嘘’.

现在你要做的是传递一个字符’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'
     )
  )
);

进一步阅读:

> Arrays
> Strings

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐