PHP7:更新迭代属性时出现问题

PHP7:更新迭代属性时出现问题,php,php-7,Php,Php 7,为什么PHP7中的foreach会再次迭代更新的对象属性?考虑下面,我只想把“O”加在所有的名字上。 $people=[ (对象)[“第一个”=>“比尔”,“最后一个”=>“盖茨”], (对象)[“第一个”=>“史蒂夫”,“最后一个”=>“乔布斯”] ]; foreach($i=>$p){ foreach($p作为$key=>$value){ 回显“$key,$value”; 如果($key='first')$p->first=$value.o'; } 回声“”; } 产出: first, B

为什么PHP7中的
foreach
会再次迭代更新的对象属性?考虑下面,我只想把“O”加在所有的名字上。
$people=[
(对象)[“第一个”=>“比尔”,“最后一个”=>“盖茨”],
(对象)[“第一个”=>“史蒂夫”,“最后一个”=>“乔布斯”]
];
foreach($i=>$p){
foreach($p作为$key=>$value){
回显“$key,$value
”; 如果($key='first')$p->first=$value.o'; } 回声“
”; }
产出:

first, Bill
first, Billo
last, Gates

first, Steve
first, Steveo
last, Jobs

上面的粘贴使用PHP7.0.22啊好的,看起来PHP7.1解决了这个问题。我是在PHP7.0.22上进行测试的,它似乎是PHP版本中的一个bug

您可以升级版本,也可以使用
array\u map()
来避免此错误

您正试图执行一种称为
映射的技术来连接特定的元素值<代码>数组映射()
就是为此而设计的

代码:()

$people=[
(对象)[“第一个”=>“比尔”,“最后一个”=>“盖茨”],
(对象)[“第一个”=>“史蒂夫”,“最后一个”=>“乔布斯”]
];
foreach($i=>$p){
foreach($p作为$key=>$value){
回显“$key,$value
”; 如果($key='first')$p->first=$value.o'; } 回声“
”; } 回显“\n\n”; $people=[ (对象)[“第一个”=>“比尔”,“最后一个”=>“盖茨”], (对象)[“第一个”=>“史蒂夫”,“最后一个”=>“乔布斯”] ]; $people=array_映射(函数($a){$a->first.='o';返回$a;},$people); foreach($i=>$p){ foreach($p作为$key=>$value){ 回显“$key,$value
”; } 回声“
”; }
输出:

first, Bill<br>first, Billo<br>last, Gates<br><br>first, Steve<br>first, Steveo<br>last, Jobs<br><br>

first, Billo<br>last, Gates<br><br>first, Steveo<br>last, Jobs<br><br>
first,Bill
first,Billo
last,Gates
first,Steve
first,Steveo
last,Jobs

首先,比洛
最后,盖茨
第一,斯蒂沃
最后,乔布斯


这不是输出结果:@mickmackusa您的输出与他的输出相同。谢谢各位,看起来他们在7中解决了这个问题。1@Barmar不,不是。再看看。更改为7.0.2,现在我看到了输出:
first, Bill<br>first, Billo<br>last, Gates<br><br>first, Steve<br>first, Steveo<br>last, Jobs<br><br>

first, Billo<br>last, Gates<br><br>first, Steveo<br>last, Jobs<br><br>