foreach循环 - php - 奇怪的行为

时间:2013-12-28 16:05:02

标签: php foreach

我是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);

?>

4 个答案:

答案 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岁。