Я написал кусок учебного кода и столкнулся с чем-то довольно странным после его запуска.
Мое расширение 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?
Это обозначает переменную как Ссылка и совершенно правильно. В большинстве случаев просто игнорируйте это и продолжайте.
В этом особом случае это, вероятно, означает, что на последний элемент вашего массива все еще ссылаются из цикла foreach. Поскольку вы использовали его в качестве ссылки там, а последний элемент цикла все еще существует после закрытия цикла, ссылка на этот элемент все еще там.
Или вкратце:
После вашего цикла $ letter по-прежнему является ссылкой на $ alphabet [2].
если ты unset($letter)
Амперсанд должен исчезнуть.
Других решений пока нет …