Pagina 1 di 1

until loop in php

Inviato: mer 28 gen 2009, 18:25
da danix
ciao a tutti,
ma non esiste il loop until in php?? nella documentazione non sono riuscito a trovare nulla... :( mi sembra molto strano però...

Mi illuminate per favore??


Grazie mille

Re: until loop in php

Inviato: mer 28 gen 2009, 18:36
da conraid
danix ha scritto:ciao a tutti,
ma non esiste il loop until in php?? nella documentazione non sono riuscito a trovare nulla... :( mi sembra molto strano però...

Mi illuminate per favore??
esistono solo questi:
http://it2.php.net/manual/en/language.c ... ctures.php

Secondo me puoi farlo con "do-while"

Re: until loop in php

Inviato: mer 28 gen 2009, 21:25
da danix
grazie conraid, pensavo di essere cerebroleso io a non trovarlo... :D

mi sembra tanto una mancanza in un linguaggio come php, c'è addirittura nella bash... :|

Re: until loop in php

Inviato: mer 28 gen 2009, 23:07
da nuitari
basta un semplice do while... è sufficiente invertire il controllo booleano

esempio, ipotizzando un do until sarebbe:

do
{
...
} until (value === true);

con il while invece è:

do
{
...
} while (value === false);

o se preferisci conservare la logica:

} while (!(value === true));

ed hai raggiunto lo scopo.
IMHO until è inutilmente ridondante.

Re: until loop in php

Inviato: gio 29 gen 2009, 9:07
da danix
Offtopic: lieto di rileggerti su questo forum nuitari... :) , volevo salutarti nell'altro topic ma ho visto che si trattava di "questioni personali" :lol: ...
tornando in topic, grazie del chiarimento, mi faresti un favore? Mi indicheresti la pagina del man di php in cui sono trattati i 3 "uguale" (===) o, se hai tempo, mi daresti tu un chiarimento?


Ancora grazie mille...

Re: until loop in php

Inviato: gio 29 gen 2009, 9:11
da conraid
danix ha scritto:Offtopic: lieto di rileggerti su questo forum nuitari... :) , volevo salutarti nell'altro topic ma ho visto che si trattava di "questioni personali" :lol: ...
tornando in topic, grazie del chiarimento, mi faresti un favore? Mi indicheresti la pagina del man di php in cui sono trattati i 3 "uguale" (===) o, se hai tempo, mi daresti tu un chiarimento?
http://www.php.net/manual/en/language.o ... arison.php

compara l'uguaglianza dei valori e dei tipi

Re: until loop in php

Inviato: gio 29 gen 2009, 10:38
da nuitari
Eheh grazie danix ^^ Lieto di riscrivere su questo forum :)

Cercherò di dare una spiegazione chiara del concetto.
Come saprai, php è un linguaggio a tipizzazione debole. Spiegandolo in breve, significa che non sei tenuto a rispettare particolari regole nella creazione o nell'utilizzo dei dati in relazione al loro tipo.

Pertanto, ad esempio, in php puoi inizializzare una variabile con un contenuto numerico e poi sostituirlo con un valore di tipo stringa, o passare un valore numerico ad una funzione che richiede valori stringa, oppure, e questo è il nostro caso, confrontare due valori di tipo differente. Php farà automaticamente le conversioni.

Relativamente ai confronti booleani, lo zero, le stringhe vuote ed il null equivalgono a FALSE, il resto equivale a TRUE.

Per cui, in una normale uguaglianza con l'operatore == ("equal") avremo:

0 == FALSE -> vero
"" == FALSE -> vero
null == FALSE -> vero
FALSE == FALSE -> vero

Come è lecito aspettarsi, questa conversione automatica può portare spesso ad errori. Pensiamo ad esempio ai valori di ritorno restituiti da determinate funzioni, come array_search().

array_search() cerca all'interno di un array un determinato valore e restituisce la chiave corrispondente. In caso non trovi nulla, restituisce FALSE.

Ipotizziamo di avere un array costituito nel seguente modo:

Codice: Seleziona tutto

$my_data = array(0 => "pippo", 1 => "pluto");
e di usare array_search per cercare "pippo" utilizzando la normale uguaglianza per verificare se il valore è stato trovato oppure no:

Codice: Seleziona tutto

if (array_search("pippo", $my_data) == false)
	echo "non trovato";
else
	echo "trovato";
la funzione array_search() trova pippo e restituisce la chiave corripondente, che è 0. Il valore 0 viene confrontato con false e, nella conversione del tipo dell'uguaglianza semplice, viene considerato uguale. Pertanto il risultato sarà "non trovato".

Per ovviare a questo problema, in php 4 è stato introdotto l'operatore === ("identical"), che oltre a confrontare il valore confronta anche il tipo di valore restituito.
Secondo questo operatore, avremo:

0 === FALSE -> falso
"" === FALSE -> falso
null === FALSE -> falso
FALSE === FALSE -> vero

Pertanto, se vogliamo rendere l'esempio di cui sopra funzionante, dovremo scrivere:

Codice: Seleziona tutto

if (array_search("pippo", $my_data) === false)
	echo "non trovato";
else
	echo "trovato";
ed in tal caso il risultato sarà "trovato", come dovrebbe essere lecito aspettarsi. L'operatore !== ("not identical") ovviamente agisce al contrario.

Re: until loop in php

Inviato: gio 29 gen 2009, 12:49
da danix
la forza di questa community è che c'è un sacco di gente preparata su un sacco di argomenti... Grazie mille per le spiegazioni... :D

Re: until loop in php

Inviato: gio 29 gen 2009, 13:17
da nuitari
eddechè, è un piacere :)
Aggiungo un ultima cosa: nella normale uguaglianza, la stringa "0" viene comunque considerata false. Questo vale solo per questa stringa specifica, non significa che le stringhe vengano convertite numericamente prima di un confronto booleano. Ad esempio, "00" non viene considerato falso, per quanto valga comunque 0 se convertita.