w3schools - php while loop
for loop vs while loop vs foreach loop PHP (6)
¿Cuál es mejor para el rendimiento?
¿A quien le importa? No será significativo. Siempre. Si este tipo de pequeñas optimizaciones importaran, no estaría usando PHP.
¿Cuál es el criterio para seleccionar un bucle?
Elija el que sea más fácil de leer y menos probable que cause errores en el futuro. Cuando recorres los enteros, los bucles son geniales. Cuando recorres una colección como una matriz, foreach
es genial, cuando solo necesitas hacer un bucle hasta que estés "listo", while
es genial.
Esto también puede depender de las reglas estilísticas (por ejemplo, en Python casi siempre se quiere usar un bucle foreach porque esa es "la forma en que se hace en Python"). Aunque no estoy seguro de cuál es el estándar en PHP.
¿Qué debe usarse cuando hacemos un bucle dentro de otro bucle?
El tipo de bucle que tenga más sentido (consulte la respuesta anterior).
En su código, el bucle for
me parece bastante natural, ya que tiene un índice de inicio y detención definido.
En primer lugar soy nuevo en PHP. He estado usando for loop, while loop, foreach loop en scripts. me pregunto
- ¿Cuál es mejor para el rendimiento?
- ¿Cuál es el criterio para seleccionar un bucle?
- ¿Qué debe usarse cuando hacemos un bucle dentro de otro bucle?
el código que me quedo con preguntándome qué bucle utilizar.
for($i=0;$i<count($all);$i++)
{
//do some tasks here
for($j=0;$j<count($rows);$j++)
{
//do some other tasks here
}
}
Es bastante obvio que puedo escribir el código anterior usando while. Espero que alguien me ayude a averiguar qué bucle debería ser mejor para usar.
¿Cuál es mejor para el rendimiento?
No importa.
¿Cuál es el criterio para seleccionar un bucle?
Si solo necesita recorrer todos los elementos de un objeto o matriz, use foreach
. Casos en los que necesitas incluir
- Cuando necesita hacer cosas explícitamente con el índice numérico, por ejemplo:
- cuando necesite utilizar elementos anteriores o siguientes desde una iteración
- Cuando necesitas cambiar el contador durante una iteración.
foreach
es mucho más conveniente porque no requiere que configures el conteo, y puede abrirse camino a través de cualquier tipo de miembro, ya sean propiedades de objetos o elementos de matrices asociativas (que un for
no captura). Por lo general, es mejor para la legibilidad.
¿Qué debe usarse cuando hacemos un bucle dentro de otro bucle?
Ambos están bien; En su caso de demostración, foreach
es la forma más sencilla de hacerlo.
Visite http://www.phpbench.com/ para obtener una buena referencia sobre algunos puntos de referencia de PHP.
El bucle for es generalmente bastante rápido. No incluya su conteo ($ filas) o el conteo ($ todos) en el por sí mismo, hágalo afuera así:
$count_all = count($all);
for($i=0;$i<$count_all;$i++)
{
// Code here
}
Colocar el recuento ($ all) en el bucle for hace que calcule esta declaración para cada bucle. Calcular el valor primero y luego usar el cálculo en el bucle hace que solo se ejecute una vez.
Rendimiento: Fácil de probar. Si estás haciendo algo como aprendizaje automático o big data, deberías mirar algo que está compilado o ensamblado y que, sin embargo, no se interpreta ; Si los ciclos realmente importan. Aquí hay algunos puntos de referencia entre los diferentes lenguajes de programación. Parece que do-while
loop es el ganador en mis sistemas que utilizan 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 for , son las principales estructuras de control que usa la mayoría de las personas en PHP. do-while es más rápido que en mis pruebas, pero está muy poco utilizado en la mayoría de los ejemplos de codificación PHP en la web.
for
cuenta está controlada, 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 la misma cosa.
while
es bueno cuando algo puede 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 devuelva false
. Es un poco más rápido que un bucle de while
en mis resultados, pero se ejecutará al menos una vez.
foreach
es bueno para iterar a través de una array
u object
. Aunque puede recorrer una cadena con una instrucción for
usando la sintaxis de matriz, no puede usar foreach para hacerlo aunque esté en PHP.
Anidamiento de la estructura de control: realmente depende de lo que esté haciendo para determinar mientras que la estructura de control se usará al anidar. En algunos casos, como la Programación Orientada a Objetos, en realidad querrá llamar a funciones que contienen sus estructuras de control (individualmente) en lugar de usar programas masivos en estilo de procedimiento que contienen muchos controles anidados. Esto puede facilitar la lectura, la depuración y la creación de instancias.
- Para el rendimiento, no importa si elige un ciclo
for
o while, el número de iteraciones determina el tiempo de ejecución. - Si conoce el número de iteraciones de derecha, elija un bucle
for
. Si desea ejecutar y detenerse en una condición, use un bucle while
- for loop es más apropiado cuando se sabe de antemano cuántas iteraciones realizar
- Mientras que el bucle se usa en el caso opuesto (cuando no sabes cuántas iteraciones son necesarias)
- For-Each loop es mejor cuando tienes que iterar sobre colecciones.
Según mi conocimiento, hay poca o ninguna diferencia de rendimiento entre el bucle while y el bucle for que no conozco sobre el bucle for-each