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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...