第一关我是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
}
}
很明显我可以用while编写上面的代码。希望有人能帮助我找出哪个循环应该更好用。
答案 0 :(得分:34)
哪一个更适合表现?
没关系。
选择循环的标准是什么?
如果您只需要遍历对象或数组的所有元素,请使用foreach
。您需要 for
的案例包括
foreach
更方便,因为它不需要你设置计数,并且可以通过任何类型的成员 - 无论是对象属性还是关联数组元素({{1}不会抓住)。这通常是最好的可读性。
当我们在另一个循环中循环时应该使用哪个?
两者都很好;在您的演示案例中,for
是最简单的方法。
答案 1 :(得分:13)
哪一个更适合表现?
谁在乎?这不会很重要。永远。如果这些微小的优化很重要,那么就不会使用PHP。
选择循环的标准是什么?
选择一个最容易阅读的,最不可能在将来导致错误。当你循环整数时,for
循环很棒。当您像数组一样循环遍历集合时,foreach
很棒,当您需要循环直到“完成”时,while
很棒。
这也可能取决于样式规则(例如,在Python中,你几乎总是想要使用foreach循环,因为这是“在Python中完成的方式”)。我不确定PHP的标准是什么。
当我们在另一个循环中循环时应该使用哪个?
无论哪种循环类型最有意义(参见上面的答案)。
在你的代码中,for
循环对我来说似乎很自然,因为你有一个已定义的开始和停止索引。
答案 2 :(得分:7)
检查http://www.phpbench.com/以获取一些PHP基准测试的良好参考。
for循环通常非常快。不包括你自己的计数($ rows)或count($ all),在外面这样做:
$count_all = count($all);
for($i=0;$i<$count_all;$i++)
{
// Code here
}
将计数($ all)放在for循环中使得它为每个循环计算此语句。首先计算该值,然后在循环中使用计算使其仅运行一次。
答案 3 :(得分:5)
for
或while
循环并不重要,迭代次数将决定执行时间。for
循环。如果要在某个条件下运行和停止,请使用while
循环答案 4 :(得分:2)
据我所知,while循环和for循环之间几乎没有性能差异我不知道for-each循环
答案 5 :(得分:1)
<强> 性能: 强>
很容易测试。如果你正在做机器学习或大数据之类的事情,你应该真正看一下编译或汇编而不是解释的东西;如果周期真的很重要。 Here are some benchmarks between the various programming languages. 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);
标准: while,for和foreach是大多数人在PHP中使用的主要控制结构。在我的测试中,do-while比while
更快,但在网络上的大多数PHP编码示例中基本上都没有得到充分利用。
for
是计数控制的,因此它会迭代特定次数;虽然我自己的结果比使用while
同样的事情要慢。
while
在某些事情可能以false
开头时很好,因此它可以防止某些事情继续运行并浪费资源。
do-while
至少一次,然后直到条件返回false
。它比我的结果中的while
循环快一点,但它至少会运行一次。
foreach
适合迭代array
或object
。即使您可以使用数组语法循环使用for
语句的字符串,但是在PHP中也不能使用foreach来执行此操作。
控制结构嵌套: 这实际上取决于您在嵌套时使用的控件结构确定的内容。在某些情况下,如面向对象编程,您实际上想要调用包含控件结构的函数(单独),而不是使用包含许多嵌套控件的过程样式的大型程序。这可以使它更容易阅读,调试和实例化。