【问题标题】:Loop or no loop? [closed]循环还是不循环? [关闭]
【发布时间】:2010-01-30 01:17:14
【问题描述】:

在这种情况下,使用循环是否更好?

echo "0";
echo "1";
echo "2";
echo "3";
echo "4";
echo "5";
echo "6";
echo "7";
echo "8";
echo "9";
echo "10";
echo "11";
echo "12";
echo "13";

$number = 0;

while ($number != 13)
{
    echo $number;
    $number = $number + 1;
}

【问题讨论】:

  • 我很好奇你为什么会考虑不在那里使用循环? while($i++ <= 13) echo $i;
  • 尝试打印前 1000 个数字,你会发现这是最好的方法
  • @Rubens:当然,在这种情况下,最好的方法是循环生成所有 1000 个单独的 echo 语句;-)

标签: php loops


【解决方案1】:

前者可能会快一点。后者的可读性很多。选择是你的;)

【讨论】:

    【解决方案2】:

    会更好

    $totalWhatevers = 14;
    for ($number = 0; $number < $totalWhatevers ; $number++)
    {
        echo $number;
    }
    

    “totalWhatevers”是描述性的,可以告诉我们您实际计数的内容。

    【讨论】:

      【解决方案3】:

      使用循环更清晰;根据经验,如果您使用较少的代码行来循环,请这样做。

      你的循环可以写得更简洁:

      foreach (range(0,13) as $n)
          echo $n, "\n";
      

      【讨论】:

      • 谢谢,我有 600 行代码,当我可以使用循环并将其全部变为 200 或更少时。只是想知道循环加载是否更快。
      • 如果处理速度对您来说很重要,那么您应该使用机器代码,而不是 PHP。能够合理地使用代码远比这里微小的性能提升重要得多。
      【解决方案4】:

      我会使用 for 循环,只是为了让所有内容都保持开放(您原来的循环似乎最多只能打印 12 个):

      for ($number = 0; $number <= 13; $number++)
      {
          echo $number;
      }
      

      写出一百万个“回声”要干净得多,而且代码相当不言自明。

      【讨论】:

        【解决方案5】:
        $string = "<?php \n";
        
        $repeatNum = 20;
        
        for($i = 0; $i < $repeatNum; $i++)
        {
            $string .= "echo \"" . $number . "\"; \n";
        }
        
        $string = "?>";
        

        现在你可以

        eval($string);
        

        file_put_contents("newfile.text", $string);
        

        你会得到一个包含所有回声的文件!

        注意:这并不是一个“严肃”的答案。如果你真的想创建一个包含多个回显的 PHP 文件,它可以工作,但在最后评估语句可能不是常规编程实践的最佳主意。

        【讨论】:

        • 你为什么要为一个标记为初学者的问题发布一个不严肃的答案?现在这是公认的答案,这绝对是可怕的!
        【解决方案6】:

        根据您要执行的操作,循环有助于使您的代码更清晰、更易于更新。

        例如,当显示的数量可能不同时,您可以使用配置变量。

        $repeat = 20;
        
        for ($i = 0; $ < $repeat; ++$i) {
           echo $i;
        }
        

        【讨论】:

          【解决方案7】:

          错误在于认为循环会生成代码。根本不是这样的。

          echo "0";
          echo "1";
          echo "2";
          echo "3";
          

          PHP 会出现并一一执行这些语句。

          for ($i = 0; $i <= 3; ++$i) {
              echo $i;
          }
          

          在这种情况下,PHP 会执行四次相同的 echo 语句。每次到达块的末尾(一个块是花括号之间的代码)时,执行都会跳回到条件。如果条件仍然成立,则再次执行该块。

          哪种方法的性能最好?这很难说。

          方法1的减速)要回显的数字范围越大,脚本中需要解析的回显语句就越多。

          方法2的减速)要回显的数字范围越大,执行跳转的次数越多,条件测试的次数越多,计数器的递增次数也越多。

          我不知道哪种情况会导致更多的 CPU 指令,或者哪种情况会导致更多的内存使用。但作为一个曾经编程过的人,我知道一个秘密:没关系。执行上的差异可能会在几百万分之一秒左右!

          因此,使效果变得明显的唯一方法是在回显一千万个数字时,在这种情况下,一种方法可能比另一种方法花费一秒钟的时间。这难道不是一个值得的收获吗?不!当我们回显一千万个数字时,我们将在这两种方法上花费 分钟。只有它们之间的差异会相差一秒钟,这完全可以忽略不计。更何况,谁知道哪个更好呢?

          作为一名程序员,你能做的最好的事情就是让你的代码可读可维护。循环比一页回声线更容易理解。通过循环,我知道您没有遗漏任何中间数字,但是对于回声,我必须检查每一行。

          技术术语版本:两种算法的复杂度都为 O(n)。它们的性能只能有一个恒定的差异,如果这个常数不是特别大,则可以忽略不计。

          【讨论】:

            【解决方案8】:

            你说的更好是什么意思?对解析器更好?对电脑更好?更快的执行时间?我可以告诉你,对于使用你的代码和系统的人来说,制作一个循环总是更好的。

            【讨论】:

              猜你喜欢
              • 2013-08-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-09-18
              • 1970-01-01
              • 1970-01-01
              • 2020-04-26
              • 1970-01-01
              相关资源
              最近更新 更多