2011-07-13 10 views
9

el código que estoy viendo hace esto ...bucle while en php con el operador de asignación

while ($info=mysql_fetch_array($data_jurisdiction)) 
{ 
//some stuff 
} 

me pregunto qué hace esta afirmación, mientras que? tiene un operador de asignación dentro de él, de modo que siempre que a $ info se le asigne un valor que no sea falso, este código se ejecutará.

+4

Sí ............ – jondavidjohn

Respuesta

13

[... S] o tanto tiempo como $ información se le asigna una valor distinto de falso, este código se ejecutará?

Bastante, sí. Incluso hay un operador de asignación dentro de esa expresión, la expresión misma sigue representando un valor. En este caso, el resultado de la expresión completa es igual a la asignación a $info. En otras palabras: la expresión es la misma que $infoo la expresión se ha asignado a $info - la última variante es quizás la mejor descripción.

Así que ahora siempre que $info sea igual a , se ejecutará el bloque de código dentro de while.

Tenga en cuenta que la comparación es loose comparison. Entonces, no solo false sino también NULL o una matriz vacía detendrá la ejecución del bloque de código interno.

+0

+1 para obtener una respuesta detallada –

+0

¿Qué sucede si $ info se asigna 0? ¿Equivale 0 a falso y por lo tanto la ejecución del ciclo se detiene? – user481913

+0

@ user481913: Sí, como con 'false' o' NULL' o la matriz vacía. – hakre

4

Para cada registro $info se rellenará con la fila actual, hasta que llegue al final del conjunto de resultados cuando se establecerá en falso (lo que debería detener el ciclo while).

0

si $ ads tiene asignado un valor distinto de falso, este código se ejecutará?

Sí.

0

lo hace bucle y se detiene si $info es falso

mysql_fetch_array(); borra fila por fila por lo que hay nuevos alltimes resultado

0

Un ciclo while ejecutará las instrucciones anidadas repetidamente, siempre que la expresión while sea true.

La expresión en su ejemplo $info = mysql_fetch_object($data_jurisdiction) comprueba si el $info, el valor asignado de mysql_fetch_object() es igual a verdadero, después de tipo malabares.

Es importante entender dos cosas aquí:

  1. mysql_fetch_object() devuelve la siguiente fila del conjunto de resultados hasta el final de la serie de datos que se alcance, donde vuelve falsa. Vea el method documentation here.
  2. Todos los valores asignados de las variables que no son iguales a 0 o null se evalúan como verdaderos después del tipo malabares.
0

Desde el manual:

El valor de una expresión de asignación es el valor asignado. Es decir, el valor de "$ a = 3" es 3.

También desde el manual sobre mysql_fetch_array:

Devuelve una matriz de cadenas que corresponde a la fila recuperada, o FALSE si no no hay más filas

Por lo tanto, una vez que no hay más filas, la asignación se convertirá en:

$info = false 

que conseguirá evaluada como falsa en la condición de tiempo, haciendo que el bucle termine.

2

gran respuesta de hakre. lo que se dice es que

while ($info=mysql_fetch_array($data_jurisdiction)) 

ejecutará en la misma forma que esta

while (mysql_fetch_array($data_jurisdiction)==true) 

o incluso esta

$info = mysql_fetch_array($data_jurisdiction); 
if($info==true) 

así que ten en cuenta que si mysql_fetch_array ($ data_jurisdiction) devuelve nada que se puede evaluar como falso, la asignación no funcionará. algunos de esos valores son (y sé que voy a olvidar algunos:

  • "0"
  • falsa
  • "falsa"
  • NULL
  • ""
  • array() (no estoy del todo seguro acerca de este)
Cuestiones relacionadas