我是PHP新手,我正在试验
现在PHP中有一些foreach循环。
我知道建议取消设置
循环后的foreach循环变量。
我注意到如果我包含// 1 //和
// 2 //,这个脚本打印正确的东西。
...
Name: Rachel, Age: 56
Name: Grace, Age: 44
(如果在最后一个循环中,它也打印正确的东西,我使用其他
变量名称如$ n和$ a而不是$ name和$ age。)
但如果我评论// 1 //和// 2 // out行,则会打印:
Name: Lisa, Age: 28
Name: Jack, Age: 16
Name: Ryan, Age: 35
Name: Rachel, Age: 46
Name: Grace, Age: 34
Name: Lisa, Age: 38
Name: Jack, Age: 26
Name: Ryan, Age: 45
Name: Rachel, Age: 56
Name: Grace, Age: 56
请注意,56次打印两次
为什么它的行为如此?
我的意思是:引擎盖下会发生什么?
<?php
$employee_age = array();
$employee_age["Lisa"] = "28";
$employee_age["Jack"] = "16";
$employee_age["Ryan"] = "35";
$employee_age["Rachel"] = "46";
$employee_age["Grace"] = "34";
foreach( $employee_age as $name => $age){
echo "Name: $name, Age: $age <br />";
}
echo "<br>";
unset($age);
unset($name);
foreach( $employee_age as $name => &$age){
$age += 10;
}
// echo "<br>";
// unset($age); // 1 //
// unset($name); // 2 //
foreach( $employee_age as $name => $age){
echo "Name: $name, Age: $age <br />";
}
echo "<br>";
unset($age);
unset($name);
?>
答案 0 :(得分:2)
如果你在第二个循环之前var_dump($employee_age)
,你会注意到最后一个条目是&int
而不是int
。它仍然是一个参考。它指向最后一个元素(忽略它自己)。这就是雷切尔56岁。
查看手册的警告:http://pl.php.net/manual/en/control-structures.foreach.php
即使在foreach循环之后,$ value和最后一个数组元素的引用仍然存在。建议通过unset()来销毁它。
答案 1 :(得分:1)
PHP引用项目的行为。
原因:我认为这比我guy can explain better。
只是一个小备忘录。
或者,要解决此问题,您可以在第三次预告中将&
添加到$age
:
foreach( $employee_age as $name => &$age){
echo "Name: $name, Age: $age <br />";
}
答案 2 :(得分:0)
嗯..不确定你为什么不设置,
简单:
$employee_age = array(
"Lisa" => 28,
"Jack" => 16,
"Ryan" => 35,
"Rachel" => 46,
"Grace" => 34);
foreach( $employee_age as $name => $age){
echo "Name: $name, Age: $age <br />";
}
echo "<br>";
foreach( $employee_age as $name => $age){
$age2 = $age + 10; // (Don't think this is required)
echo "Name: $name, Age: $age2 <br />"; // Try with just $age+10
}
?>
答案 3 :(得分:0)
Grace = 56因为你的代码是;
foreach( $employee_age as $name => &$age){
$age += 10;
}
将其更改为
foreach( $employee_age as $name => $age){
$age += 10;
}
Grace再次34岁。