php循环数组的引用问题,zval结构

发布于 2022-09-07 08:28:22 字数 882 浏览 25 评论 0

$arr=array("a","b","c","d");

foreach ($arr as &$value) {

}
//$value=&arr[3];$value="d";

foreach ($arr as $key=>$value) {
  echo "<pre>";
  var_dump($arr);

}

结果如下

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  &string(1) "a"
}

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  &string(1) "b"
}

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  &string(1) "c"
}

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  &string(1) "c"
}

我想问下,第二个foreache函数前,已经确定了$value=&arr[3];那么下面的
在第一次循环时$value=$arr[0];是否完全覆盖了第一个$value时,
还有为什么,最后的值是abcc,能否从zval结构解释下吗

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

神经暖 2022-09-14 08:28:22

你的理解是没错的,认真想想:)

第一个foreach之后,$value就指向了数组的第四个元素:

[a b c d]
       ^
       value

第二各个foreach,每次都会覆盖$value,前3次是这样的:

[a b c a]
 ^     ^
       value

[a b c b]
   ^   ^
       value

[a b c c]
     ^ ^
       value

第4次循环到第4个元素,因为在第3次的时候已经被覆盖成c了,所以第4次也是c

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文