我有一个如下所示的循环:
foreach ($header as $i) {
$i += $i;
}
我正在尝试加载变量($ i),然后在该循环之外回显该变量,如下所示:
echo $i;
然而它总是返回0;
是否可以让它返回它在循环中创建的值?
答案 0 :(得分:12)
答案 1 :(得分:6)
$i
。
在循环外创建一个变量,在循环期间添加它,并在它之外再次回显。
$outside_var = 0;
foreach ($header as $i) {
$outside_var += $i;
}
echo $outside_var;
答案 2 :(得分:3)
foreach ($header as $i) {
$i += $i;
}
上面的代码有很多问题。其他答案解决了这些问题,但有了解释,所以你可能会觉得这很有帮助。出于本答案的目的,我将假设$header
包含array('a', 'b', 'c')
,并且您的意图是连接值。
首先,您使用数字加法运算符+=
而不是字符串连接操作.=
。这就是$i
始终为0的原因:每次尝试使用$header
添加时,+=
的值都会转换为整数,假设它们不以数字开头,它们将始终转换为到整数0
。
其次,如果 与.=
连接,则每次循环都会分配给$i
,因此其先前的值将被销毁。在循环的第一次传递中,您实际上是这样做的:
$i = 'a';
$i .= $i' // aa
在第二遍,你这样做:
$i = 'b';
$i .= $i; // bb
等等。您需要使用另一个变量来存储数组的每个元素并保存连接的值。否则,当循环存在时,$i
将总是成为数组的最后一个值,重复。
最后,在尝试读取之前,应始终声明变量,这是所有速记所暗示的(+=
,.=
,*=
等运营商。在E_NOTICE
中将error_reporting
包含在php.ini中是一个非常好的主意,这样您就可以看到它引发的通知。