第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
}
}
这是很明显,我可以使用,而上面写的代码。 希望有人会帮我找出哪些循环应该更好地使用。
其中之一是获得更好的性能?
不要紧
有什么标准来选择一个循环?
如果你只需要通过一个对象或数组的所有元素走路,使用foreach
。 在你需要的情况下for
包括
- 当你明确需要做的事情与数字索引,例如:
- 当你需要使用来自迭代中一个或下一个元素
- 当你需要一个迭代过程中改变计数器
foreach
是方便多了,因为它不要求你设置的计数,并且可以通过任何成员的工作,它的方式-无论是对象属性或关联数组元素(其中for
不着)。 它通常是最好的可读性。
其时,应使用我们循环的另一循环内?
两者都是罚款; 在您的演示情况下, foreach
是要走的最简单的方法。
其中之一是获得更好的性能?
谁在乎? 这不会是显著。 永远。 如果这些种种微小优化要紧,你就不会使用PHP。
有什么标准来选择一个循环?
挑选一个最简单的方法来读取和最有可能在未来造成的错误。 当你通过整数中循环, for
循环是巨大的。 当你通过像数组集合循环, foreach
是伟大的,当你只是需要循环,直到你“完成”, while
是伟大的。
这可能取决于谋篇太(例如,在Python中你几乎总是要使用foreach循环,因为这是“它的方式在Python中做”)。 我不知道标准是什么PHP虽然。
其时,应使用我们循环的另一循环内?
无论环型是最有意义的(见上面的答案)。
在你的代码中, for
循环似乎很自然的我,因为你有一个明确的开始和停止索引。
检查http://www.phpbench.com/对一些PHP基准很好的参考。
for循环通常是相当快的。 不包括您的计数($行)或计数($全部)在为自己,做到这一点以外,像这样:
$count_all = count($all);
for($i=0;$i<$count_all;$i++)
{
// Code here
}
在配售计数($全部)的循环使得计算这个语句给每个循环。 首先计算值,然后利用循环计算使它只运行一次。
- for循环是比较合适的,当你提前知道多少次迭代执行
- While循环在相反的情况下使用(当你不知道有多少次迭代需要)
- for-each循环最好的时候,你必须遍历集合。
据我所知,很少有与while循环和for循环,我不知道该for-each循环没有性能上的差异
性能:易考不上。 如果你正在做类似的机器学习或大数据你应该看东西是编译或组装的 ,不解释 ,虽然; 如果循环真正的问题。 这里有各种编程语言之间的一些基准。 它看起来像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
好用于通过迭代array
或object
。 即使你可以遍历一个字符串for
使用数组语句语法您不能使用的foreach做虽然在PHP。
控制结构嵌套:这真的取决于你在做什么决定,同时控制结构嵌套时使用。 在某些情况下,像面向对象编程,你会真正想要调用包含您的控制结构(独立)的功能,而不是使用过程中的风格,包含许多嵌套控件大规模计划。 这可以使它更容易阅读,调试和实例。