gpt4 book ai didi

php - 为 php 中的 for 循环重置指针

转载 作者:可可西里 更新时间:2023-11-01 00:13:40 25 4
gpt4 key购买 nike

给定以下代码

<?php
$a = array(1,2,3,4,5,6);
$c=0;
foreach($a as $v){
if($v==5&&$c==0){
$c=1;
reset($a);
}
var_dump($v);
}

如何重置指针以便打印 1,2,3,4,5,1,2,3,4,5,6 ?

我知道在这种情况下我可以简单地

<?php
$a = array(1,2,3,4,5,6);
$c=0;
for($i=0;$i<count($a);++$i){
$v = $a[$i];
if($v==5&&$c==0){
$c=1;
$i=-1; //because of the loop ++$i
}
var_dump($v);
}

但我有一段更复杂的代码,解决方案并不像重写循环(不是数字键)那么简单。

有没有 PHP 高手可以帮助我?

最佳答案

如文档所示:

Note: When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop.

As foreach relies on the internal array pointer, changing it within the loop may lead to unexpected behavior.

http://php.net/manual/en/control-structures.foreach.php

不确定“意外行为”是什么,因为我从来没有尝试过这个......但手动使用 each() 可能更安全......在你的代码中也更清晰。

reset($a);
while(list($key, $val) = each($a)) {
if($val==5&&$c==0){
$c=1;
reset($a);
}
var_dump($val);
}

Foreach 问题说明

我以为我之前看到你不能依赖foreach中的内部指针......但是这次在文档中找不到它......只有“意外结果”。但是,感谢一位评论者,我找到了曾经在 foreach 中的文本:

Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it."

http://php.net/manual/en/control-structures.foreach.php#114759

关于php - 为 php 中的 for 循环重置指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29610130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com