パフォーマンスを知らないループとループのためしばらくの間、無パフォーマンスの違いに少しあります: 簡単に十分なテストする。機械学習や大きなデータのようなものをやっているのであれば、がまたはと組み立てられたがあり、が解釈されていないものがあります。と解釈してください。サイクルがの場合、実際にはとなります。 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
よりも高速ですが、Web上のほとんどのPHPコーディング例ではほとんど使われていません。
for
はカウント制御されているため、特定の回数だけ繰り返します。同じことについてはwhile
を使用するよりも自分の結果が遅くなります。
while
は、何かがfalse
として始まる可能性がある場合に適しているため、何かが実行されてリソースが無駄になることを防ぐことができます。
do-while
少なくとも1回、その後条件がfalse
になるまで。私の結果ではwhile
ループより少し速いですが、少なくとも1回は実行されます。
は、array
またはobject
で繰り返し処理するのに適しています。配列の構文を使用してfor
ステートメントで文字列をループすることはできますが、PHPではforeachを使用することはできません。
制御構造のネスト:それは本当にあなたがネストするときの制御構造を使用しながら決定するためにやっていることに依存します。オブジェクト指向プログラミングのようないくつかのケースでは、多くのネストされたコントロールを含む手続き型スタイルの大規模なプログラムを使用するのではなく、実際にコントロール構造を含む関数を(個別に)呼び出すことになります。これにより、読み込み、デバッグ、およびインスタンス化が容易になります。
パフォーマンスに関しては関係ありません。 –
文法的に、インクリメンタルな 'for'ループは、PHPで配列を反復するのにはめったに使われません。ループ内で配列キーと値の両方を供給することができるので、代わりに 'foreach'が使われます。 –