Вывод 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  <---
)
Другие вопросы по тегам