Strano comportamento con while

Guarda un p gianni:

while($image = $db->fetcharray($exec)){
$images[] = $image;
}

produce

array
 0 => 
  array
   0 => string '789' (length=3)
   'id' => string '789' (length=3)
   1 => string 'property photo' (length=14)
   'title' => string 'property photo' (length=14)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 1 => 
  array
   0 => string '790' (length=3)
   'id' => string '790' (length=3)
   1 => string 'property photo' (length=14)
   'title' => string 'property photo' (length=14)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 2 => 
  array
   0 => string '795' (length=3)
   'id' => string '795' (length=3)
   1 => string 'Mare' (length=4)
   'title' => string 'Mare' (length=4)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 3 => 
  array
   0 => string '792' (length=3)
   'id' => string '792' (length=3)
   1 => string 'property photo' (length=14)
   'title' => string 'property photo' (length=14)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 4 => 
  array
   0 => string '793' (length=3)
   'id' => string '793' (length=3)
   1 => string 'property photo' (length=14)
   'title' => string 'property photo' (length=14)
   2 => string '' (length=0)
   'description' => string '' (length=0)

mentre

while($images[] = $db->fetcharray($exec));

produce:

array
 0 => 
  array
   0 => string '789' (length=3)
   'id' => string '789' (length=3)
   1 => string 'property photo' (length=14)
   'title' => string 'property photo' (length=14)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 1 => 
  array
   0 => string '790' (length=3)
   'id' => string '790' (length=3)
   1 => string 'property photo' (length=14)
   'title' => string 'property photo' (length=14)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 2 => 
  array
   0 => string '795' (length=3)
   'id' => string '795' (length=3)
   1 => string 'Mare' (length=4)
   'title' => string 'Mare' (length=4)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 3 => 
  array
   0 => string '792' (length=3)
   'id' => string '792' (length=3)
   1 => string 'property photo' (length=14)
   'title' => string 'property photo' (length=14)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 4 => 
  array
   0 => string '793' (length=3)
   'id' => string '793' (length=3)
   1 => string 'property photo' (length=14)
   'title' => string 'property photo' (length=14)
   2 => string '' (length=0)
   'description' => string '' (length=0)
 5 => boolean false

Mi sembra un comportamento alquanto bizzarro, nonostante aver fatto la tabella di traccia non riesco a capire come mai quest'iterazione in pi...

Qualche illuminazione a riguardo?

EDIT : Verifico che non sia il metodo fetchArray a generare il comportamento.

No, anche con mysql_fetch_array il comportamento lo stesso.

:bye:

inviato 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

Ciao,

forse devi specificare anche il tipo di risultato: MYSQL_ASSOC, MYSQL_NUM e MYSQL_BOTH.

http://it.php.net/manual/it/function.mysql-fetch-array.php

:bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

naa, non c'entra il tipo di risultato restituito (array numerico, array associativo, array numerico e associativo)

proprio un comportamento strano del while a quanto pare esegue un'iterazione inutile.

infatti fa la stessa cosa con mysql_fetch_object.

se noti, il risultato un'array bidimensionale, la prima dimensione ad avere un elemento in pi, la seconda non mi interessa (in questo contesto)

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

Si, ci sono cascato anch'io tempo fa ;D c' una sottile differenza tra i due cicli.

Partiamo con una precisazione: l'istruzione $db->fetcharray($exec) pu essere richiamata un numero indefinito di volte. Fino a che ci sono risultati da restituire allora ritorna un array, poi ritorna sempre null.

while($image = $db->fetcharray($exec)){

$images[] = $image;

}

Con questo codice l'istruzione $images[] = $image; viene eseguita solo se $image diverso da false, ovvero fino a che $db->fetcharray restituisce un array. Quindi se i record sono N l'istruzione $image = $db->fetcharray($exec) viene eseguita N+1 volte mentre l'istruzione $images[] = $image; viene eseguita N volte

------------

while($images[] = $db->fetcharray($exec));

questo ciclo, come il precedente, esegue la condizione del while N+1 volte quindi l'array $images viene caricato con N array e con un null.

:bye:

Se noti

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda