在循环中使用number_format

时间:2018-08-06 18:41:36

标签: php

我正在运行一次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>";
    }
  }
?>

1 个答案:

答案 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}},01)。为了确保只有两次迭代,请使用2运算符,现在仅对域<0 <= i < 20)中的值执行循环。

如果您仍然愿意使用1运算符并且对基于非零的迭代计数感到满意,那么您可以将<=的初始值更改为i来弥补错误。

通过编写代码的方式,我假设您希望内部循环运行10次,而不是11次。这可以解释为什么您要进行额外的迭代,并且该问题与{ {1}}。如果不使用该函数时仅获得10次迭代,则可能需要确保语句1在PHP解释器中的计算结果为true。

此外,作为代码样式问题,我建议您在语句中使用一致的大小写。您编写number_format(小写),但也使用1 == 1(大写)。惯例是两者都使用小写字母。

我不知道为什么没有foreach时您只会得到10次迭代。您可能计算不正确?尝试将其更改为For,看看是否可以解决您的问题。