Rendimiento: lo suficientemente Fácil Probar. Si está haciendo algo así como aprendizaje automático o gran cantidad de datos, debería ver algo que es compilado o ensamblado y no interpretado como; si los ciclos realmente importan. Here are some benchmarks between the various programming languages. Parece que do-while
loop es el ganador en mis sistemas usando PHP
con estos ejemplos.
$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);
Criterios:while, for y foreach son las principales estructuras de control de la mayoría de la gente usa en PHP. do-while es más rápido que while
en mis pruebas, pero está muy poco utilizado en la mayoría de los ejemplos de codificación PHP en la web.
for
es un conteo controlado, por lo que itera un número específico de veces; aunque es más lento en mis propios resultados que usar un while
para lo mismo.
while
es bueno cuando algo podría comenzar como false
, por lo que puede evitar que algo se ejecute y desperdicie recursos.
do-while
al menos una vez, y luego hasta que la condición vuelva a false
. Es un poco más rápido que un bucle while
en mis resultados, pero se ejecutará al menos una vez.
foreach
es bueno para iterar a través de array
o object
. Aunque puede recorrer una cadena con una instrucción for
usando sintaxis de matriz, no puede usar foreach para hacerlo en PHP.
control Estructura de anidamiento: Realmente depende de lo que está haciendo para determinar la estructura de control, mientras que para usar cuando se anidan. En algunos casos, como la Programación Orientada a Objetos, en realidad querrás llamar a funciones que contengan tus estructuras de control (individualmente) en lugar de usar programas masivos en estilo de procedimientos que contengan muchos controles anidados. Esto puede facilitar la lectura, la depuración y la creación de instancias.
No importa el rendimiento. –
Estilísticamente, los bucles incrementales 'for' se usan muy raramente para iterar matrices en PHP. 'foreach' se usa generalmente en su lugar, ya que puede proporcionar tanto la clave de matriz como el valor dentro del bucle. –