Вывод var_dump с использованием эталонного цикла foreach
Я использую цикл foreach со ссылками, то есть: foreach($elements as &$item)
Теперь, когда я использую var_dump($elements);
после foreach()
последний элемент всегда имеет &
символ добавляется к типу переменной (&string
, &array
, &boolean
, так далее).
Пример вывода:
array(4) {
[0]=>
string(4) "this"
[1]=>
string(2) "is"
[2]=>
string(2) "an"
[3]=>
&string(7) "example"
}
Почему это так и какая функциональность / влияние это имеет?
1 ответ
Это адресный указатель. Вы можете unset($item)
чтобы избежать этого.
Ответы на ваш вопрос:
1. Почему это:
Вы можете найти ссылку в руководстве
Предупреждение Ссылка на значение $ и последний элемент массива остаются даже после цикла foreach. Рекомендуется уничтожить его с помощью unset().
Это возникает, когда вы используете ссылку в цикле foreach. Ссылка находится с последним элементом массива.
2. Какая функциональность / влияние это имеет
Рассмотрим эту ситуацию:
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
}
print_r($arr);
foreach ($arr as $value) {
}
print_r($arr);
Ваш вывод будет:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 3 <---
)
Если вы используете unset
:
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
}
print_r($arr);
unset($value); <---
foreach ($arr as $value) {
}
print_r($arr);
Результат будет:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4 <---
)