Вызов неопределенного элемента массива показывает значение другого определенного элемента

При вызове неопределенного элемента массива он показывает мне значение другого определенного элемента.

Пример структуры массива:

  $array = array(
    'a' => array(
      'b' => 'c'
    )
  );

При использовании команды echo для $array['a']['b']['x'] отображается значение 'c'. Почему это происходит, я действительно не понимаю, так как $array['a']['b']['x'] не определено.

А потом, когда я пытаюсь добавить другое значение, используя команду $array['a']['b']['x'] = 'y'; Он переписывает значение $array['a']['b'] в 'y'

Почему-то я действительно не понимаю этого поведения, может кто-нибудь объяснить, как это возможно? И как тогда я смогу создать новое строковое значение в $array['a']['b']['x'] = 'xyz', чтобы не перекрывать $array['a']['b']?

4 голоса | спросил defekt19754 27 PMpWed, 27 Apr 2011 15:59:08 +040059Wednesday 2011, 15:59:08

1 ответ


0

На самом деле это вообще не связано с массивами. Это проблема string .

В PHP вы можете получать доступ и изменять символы строки с помощью массива . Рассмотрим эту строку:

$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'
     )
  )
);

Дополнительная информация:

ответил Felix Kling 27 PMpWed, 27 Apr 2011 16:09:57 +040009Wednesday 2011, 16:09:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132