for循环VS while循环VS的foreach循环PHP(for loop vs while l

2019-06-18 11:58发布

第1关我是新来的PHP。 我一直在使用for循环,while循环,foreach循环中的脚本。 我想知道

  • 其中之一是获得更好的性能?
  • 有什么标准来选择一个循环?
  • 其时,应使用我们循环的另一循环内?

这我坚持用不知道要使用哪个循环的代码。

for($i=0;$i<count($all);$i++)
{
 //do some tasks here
 for($j=0;$j<count($rows);$j++)
 {
  //do some other tasks here 
 }
}

这是很明显,我可以使用,而上面写的代码。 希望有人会帮我找出哪些循环应该更好地使用。

Answer 1:

其中之一是获得更好的性能?

不要紧

有什么标准来选择一个循环?

如果你只需要通过一个对象或数组的所有元素走路,使用foreach 。 在你需要的情况下for包括

  • 当你明确需要做的事情与数字索引,例如:
  • 当你需要使用来自迭代中一个或下一个元素
  • 当你需要一个迭代过程中改变计数器

foreach是方便多了,因为它不要求你设置的计数,并且可以通过任何成员的工作,它的方式-无论是对象属性或关联数组元素(其中for不着)。 它通常是最好的可读性。

其时,应使用我们循环的另一循环内?

两者都是罚款; 在您的演示情况下, foreach是要走的最简单的方法。



Answer 2:

其中之一是获得更好的性能?

谁在乎? 这不会是显著。 永远。 如果这些种种微小优化要紧,你就不会使用PHP。

有什么标准来选择一个循环?

挑选一个最简单的方法来读取和最有可能在未来造成的错误。 当你通过整数中循环, for循环是巨大的。 当你通过像数组集合循环, foreach是伟大的,当你只是需要循环,直到你“完成”, while是伟大的。

这可能取决于谋篇太(例如,在Python中你几乎总是要使用foreach循环,因为这是“它的方式在Python中做”)。 我不知道标准是什么PHP虽然。

其时,应使用我们循环的另一循环内?

无论环型是最有意义的(见上面的答案)。

在你的代码中, for循环似乎很自然的我,因为你有一个明确的开始和停止索引。



Answer 3:

检查http://www.phpbench.com/对一些PHP基准很好的参考。

for循环通常是相当快的。 不包括您的计数($行)或计数($全部)在为自己,做到这一点以外,像这样:

$count_all = count($all);
for($i=0;$i<$count_all;$i++)
{
    // Code here
}

在配售计数($全部)的循环使得计算这个语句给每个循环。 首先计算值,然后利用循环计算使它只运行一次。



Answer 4:

  • 出于性能,如果你选择一个不要紧forwhile循环,迭代的次数确定执行时间。
  • 如果你知道在正手的迭代次数,选择for循环。 如果你想运行和停止的状态,使用while循环


Answer 5:

  • for循环是比较合适的,当你提前知道多少次迭代执行
  • While循环在相反的情况下使用(当你不知道有多少次迭代需要)
  • for-each循环最好的时候,你必须遍历集合。

据我所知,很少有与while循环和for循环,我不知道该for-each循环没有性能上的差异



Answer 6:

性能:易考不上。 如果你正在做类似的机器学习或大数据你应该看东西是编译组装的 ,不解释 ,虽然; 如果循环真正的问题。 这里有各种编程语言之间的一些基准。 它看起来像do-while循环是用我的系统的赢家PHP这些例子。

$my_var = "some random phrase";

function fortify($my_var){
    for($x=0;isset($my_var[$x]);$x++){
        echo $my_var[$x]." ";
    }
}

function whilst($my_var){
    $x=0;
    while(isset($my_var[$x])){
       echo $my_var[$x]." ";
       $x++;
    }
}

function dowhilst($my_var){
    $x=0;
    do {
       echo $my_var[$x]." ";
       $x++;
    } while(isset($my_var[$x]));
}

function forstream(){
    for($x=0;$x<1000001;$x++){
        //simple reassignment
        $v=$x;
    }
    return "For Count to $v completed";
}

function whilestream(){
    $x=0;
    while($x<1000001){
        $v=$x;
        $x++;
    }
    return "While Count to 1000000 completed";
}

function dowhilestream(){
    $x=0;
    do {
        $v=$x;
        $x++;
    } while ($x<1000001);
    return "Do while Count to 1000000 completed";
}

function dowhilestream2(){
    $x=0;
    do {
        $v=$x;
        $x++;
    } while ($x!=1000001);
    return "Do while Count to 1000000 completed";
}

$array = array(
    //for the first 3, we're adding a space after every character.
        'fortify'=>$my_var,
        'whilst'=>$my_var,
        'dowhilst'=>$my_var,
   //for these we're simply counting to 1,000,000 from 0
   //assigning the value of x to v 
        'forstream'=>'',
        'whilestream'=>'',
        'dowhilestream'=>'',
   //notice how on this one the != operator is slower than
   //the < operator
        'dowhilestream2'=>''
        );

function results($array){
    foreach($array as $function=>$params){


      if(empty($params)){
        $time= microtime();
        $results = call_user_func($function);  
      } elseif(!is_array($params)){
        $time= microtime();  
        $results = call_user_func($function,$params);
      } else {
        $time= microtime();  
        $results = call_user_func_array($function,$params);
      }
      $total = number_format(microtime() - $time,10);
      echo "<fieldset><legend>Result of <em>$function</em></legend>".PHP_EOL;
      if(!empty($results)){
          echo "<pre><code>".PHP_EOL;
          var_dump($results);
          echo PHP_EOL."</code></pre>".PHP_EOL;
      }
      echo "<p>Execution Time: $total</p></fieldset>".PHP_EOL;
    }
}

results($array);

标准: 同时 , 对和的foreach是主要的控制结构中的大部分人在PHP中使用。 这样做,虽然比快while在我的测试,但在网络上大多数PHP代码的例子主要是充分利用。

for被计数的控制,因此它的迭代特定次数; 虽然它是在我自己的结果比使用速度较慢while同样的事情。

while是好东西时,可能一开始就是false ,所以它可以防止东西从不断运行和资源浪费。

do-while至少一次,然后直到条件返回false 。 它比一个快一点while在我的结果循环,但它要至少运行一次。

foreach好用于通过迭代arrayobject 。 即使你可以遍历一个字符串for使用数组语句语法您不能使用的foreach做虽然在PHP。

控制结构嵌套:这真的取决于你在做什么决定,同时控制结构嵌套时使用。 在某些情况下,像面向对象编程,你会真正想要调用包含您的控制结构(独立)的功能,而不是使用过程中的风格,包含许多嵌套控件大规模计划。 这可以使它更容易阅读,调试和实例。



文章来源: for loop vs while loop vs foreach loop PHP