我是PHP的新手,我不明白为什么下面代码的最终结果是'233'而不是'231',不是foreach中的$ a是临时变量吗?
<?php
$a = '1';
$c = array('2', '3');
foreach($c as $a){
echo $a ;
}
echo $a;
?>
有人可以帮忙吗? THKS。
2014-11-28更新
现在我知道我的问题是什么。正如接受的答案和this answer所指出的那样,foreach
和while
都不像functions
那样,它们就像$a='3';
一样只是普通句子。所以现在我知道这是我的误解而且不只是php
,因为我在python中尝试过,它是一样的。
a = 123
b = [1, 2, 3]
for a in b:
print a
print a
答案 0 :(得分:6)
第1行的$a
和$a
循环中的foreach()
是同一个对象。在循环结束后,$a
的值为3
,在最后一个语句中为echo
。
根据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
。
更多信息:http://php.net/manual/en/language.variables.scope.php
答案 1 :(得分:1)
$a
循环中的foreach
会覆盖循环外的$a
。
答案 2 :(得分:0)
您在foreach
循环中使用了相同的变量名称。你的foreach工作如下:
$c[0]
的值为$a
。$c[1]
的值为$a
。$a
的值变为3而不是1。这就是为什么结果是233.而不是231。