我正在运行一次for循环10次,以填充数据表中的数据。为此,我想使用number_format来格式化数字。但是,当我应用number_format时,出于某种原因,For循环又运行了一次。
当我排除number_format时,它可以正常工作。谁能解释为什么会这样?
<?php
foreach($data['data'] as $result) {
For ($n = 0; $n <= 10; $n++){
echo "<td>";
echo number_format($result[$n], 0, ".", ",");
echo "</td>";
}
}
?>
答案 0 :(得分:1)
TL; DR::循环将始终额外运行一次。假设您的number_format
函数调用中没有错误,那么要使该代码运行10次,您要做的所有工作就是将代码更改为for($n = 0; $n < 10; n++)
。请注意使用<
而不是<=
。
For
循环实际上只是while
循环的语法糖。语句for(initial_statement; bound_condition; loop_statement) { code; }
等效于
initial_statement;
while(bound_condition) {
code;
loop_statement;
}
在功能上等同于
initial_statement;
while(true) {
code;
loop_statement;
if(!bound_condition) break;
}
这意味着,如果您希望循环运行两次,并编写for($i = 0; $i <= 2; $i++)
,则代码将如下循环:
$ i = 0
i++;
(i
现在等于1
)
i <= 2
(条件为true
,请继续)
$ i = 1
i++;
(i
现在等于2
)
i <= 2
(条件为true
,请继续)
$ i = 2
i++;
(i
现在等于3
)
i <= 2
(条件为FALSE
,请中断)
当控制变量以<=
开始时使用0
运算符会引起额外的迭代,因为存在i
的三个整数值,使得0 <= i <= 2
({ {1}},0
和1
)。为了确保只有两次迭代,请使用2
运算符,现在仅对域<
(0 <= i < 2
和0
)中的值执行循环。
如果您仍然愿意使用1
运算符并且对基于非零的迭代计数感到满意,那么您可以将<=
的初始值更改为i
来弥补错误。
通过编写代码的方式,我假设您希望内部循环运行10次,而不是11次。这可以解释为什么您要进行额外的迭代,并且该问题与{ {1}}。如果不使用该函数时仅获得10次迭代,则可能需要确保语句1
在PHP解释器中的计算结果为true。
此外,作为代码样式问题,我建议您在语句中使用一致的大小写。您编写number_format
(小写),但也使用1 == 1
(大写)。惯例是两者都使用小写字母。
我不知道为什么没有foreach
时您只会得到10次迭代。您可能计算不正确?尝试将其更改为For
,看看是否可以解决您的问题。