Амперсанд добавляется в конец массива var_dump

Я написал кусок учебного кода и столкнулся с чем-то довольно странным после его запуска.

Мое расширение Chrome Var Dumpling не увидело последнюю запись в массиве, потому что к типу значения был добавлен амперсанд.

Я проверил с этим фрагментом кода:

$alphabet = array('a', 'b', 'c');

foreach ($alphabet as &$letter) {
$letter .= 'a';
}

var_dump($alphabet);

Результат var_dump:

array(3) {
[0]=>
string(2) "aa"[1]=>
string(2) "ba"[2]=>
&string(2) "ca"}

Вы можете видеть, что последняя запись &string(2) "ca" вместо того, что я ожидал string(2) "ca", Там нет проблем в логической части этого, я могу позвонить $alphabet[2] и он будет возвращать значение последней записи ca,

Что мне интересно, так это соглашение или какой-то странный взлет в PHP?

9

Решение

Это обозначает переменную как Ссылка и совершенно правильно. В большинстве случаев просто игнорируйте это и продолжайте.

В этом особом случае это, вероятно, означает, что на последний элемент вашего массива все еще ссылаются из цикла foreach. Поскольку вы использовали его в качестве ссылки там, а последний элемент цикла все еще существует после закрытия цикла, ссылка на этот элемент все еще там.
Или вкратце:

После вашего цикла $ letter по-прежнему является ссылкой на $ alphabet [2].
если ты unset($letter)Амперсанд должен исчезнуть.

http://php.net/manual/en/language.references.php

10

Другие решения

Других решений пока нет …