Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php for循环和while循环中的变量范围_Php_Python_For Loop_While Loop - Fatal编程技术网

Php for循环和while循环中的变量范围

Php for循环和while循环中的变量范围,php,python,for-loop,while-loop,Php,Python,For Loop,While Loop,我是PHP新手,我不明白为什么下面代码的最终结果是'233'而不是'231',foreach中的$a不是一个临时变量吗 <?php $a = '1'; $c = array('2', '3'); foreach($c as $a){ echo $a ; } echo $a; ?> foreach循环中的$a覆盖循环外的$a。您在foreach循环中使用了相同的变量名称。您的foreach的工作方式如下: 在第一次迭代中:赋值2

我是PHP新手,我不明白为什么下面代码的最终结果是'233'而不是'231',foreach中的$a不是一个临时变量吗

<?php
    $a = '1';
    $c = array('2', '3');
    foreach($c as $a){
        echo $a ;
    }
    echo $a;
?>

foreach
循环中的
$a
覆盖循环外的
$a

您在
foreach
循环中使用了相同的变量名称。您的foreach的工作方式如下:

  • 在第一次迭代中:赋值2意味着
    $c[0]
    的值被赋值给
    $a
  • 在下一次迭代中:赋值3意味着
    $c[1]
    的值被赋值给
    $a
  • 之后,
    $a
    的值变为3,如果为1

  • 这就是为什么结果是233。不是231。

    第1行的
    $a
    foreach()
    循环中的
    $a
    是一个相同的对象。循环结束后,
    $a
    具有值
    3
    ,该值在上一条语句中是
    echo
    ed。
    根据php.net:

    大多数情况下,所有PHP变量都只有一个作用域

    只有在函数中,变量范围才不同。
    这将产生您想要的结果“231”:

    $a = '1';
    $c = array('2', '3');
    function iterate($temp)
    {
        foreach($temp as $a)
            echo $a ;
    }
    iterate($c)
    echo $a;
    
    因为在
    iterate()
    函数中,
    $a
    独立于调用代码的
    $a


    更多信息:

    因为您在while循环中重新声明了$a。。使其成为数组的最后一个值。@Naruto所以你的意思是$a的行为不像一个临时变量?@Naruto没有理解。(\ux)。谢谢。如果在最后一部分更改$b='1'并回显$b,则得到231。
    $a = '1';
    $c = array('2', '3');
    function iterate($temp)
    {
        foreach($temp as $a)
            echo $a ;
    }
    iterate($c)
    echo $a;