var_dump 使用 foreach 引用循环输出

var_dump output using foreach reference loop

我正在使用带引用的 foreach 循环,即:foreach($elements as &$item)

现在,当我在 foreach() 之后使用 var_dump($elements); 时,最后一个元素总是有一个 & 字符前置到它的变量类型(&string&array&boolean、等等)。

示例输出:

array(4) {
  [0]=>
  string(4) "this"
  [1]=>
  string(2) "is"
  [2]=>
  string(2) "an"
  [3]=>
  &string(7) "example"
}

为什么会这样,它有什么功能/影响?

是地址指针。你可以unset($item)避免这种情况。

您问题的答案:

1.为什么是这样 :

您可以在 manual

中找到参考

Warning Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by 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  <---
)