[Php-it] array ricerca ordine alfabetico

Luca 'Ziabice' Gambetta lucagambetta at tiscali.it
Tue Apr 3 16:18:22 CEST 2007


On Tue, 3 Apr 2007 12:19:50 +0200
"Cristiano Verondini" <cverondini at deis.unibo.it> wrote:

> >>     function MyFind($where, $what) {
> >>
> >>         $res = array();
> >>         for ($i = 0, $m = count($where); $i < $m; $i++)
> >>             if (substr($v = $where[ $i ], 0, 1) === $what)
> >>                 $res[] = $v;
> >>
> >>         return $res;
> >>     }
> >>
> >>         Cris
> 
> > Provaci ancora, Cris!
> >
> > function puccialo(&$arr, $lettera) {
> > $s = create_function('$e', 'return $e{0} == \''.$lettera.'\';');
> > return array_filter($arr, $s);
> > }
> 
>     Non amo la creazione al volod elle funzioni se proprio non è
> necessaria. 

Concordo, ma era il modo più veloce (intendo tempo fisico di battitura)
per scrivere sta cosa, non il migliore. Ritengo cmq la mia
soluzione migliore della tua, a patto che si metta un commento prima
della chiamata ad array_filter in cui si spieghi cosa faccia... :-D

> Nel tuo caso, non passerei l'array per riferimento (non
> lo devi modificare, ed il passaggio per riferimento è più lento di
> quello per valore) e userei l'operatore di confronto '===' (più
> performante nel caso di dati dello stesso tipo). 

Il passaggio per riferimento è un errore che non ho corretto perché
andavo di corsa dato che avevo scritto prima il codice in un modo poi
mi sono ricordato di una cosa e ho usato un altro approccio (nel giro
di 5 minuti).

> Inoltre non amo la
> sintassi con le parentesi graffe per l'accesso ad elementi di una
> stringa (per quanto forse più performante, ma non ho fatto dei test).
> Per inciso mi sembra di avere letto che in PHP6 verrà abbandonata (ma
> su questa cosa non sono per niente sicuro).

Sinceramente l'implementazione ottimale la farei con una funzione
(strpos) che controlla quanta parte della stringa (piuttosto che un
singolo carattere) corrisponde a quanto cercato a partire dall'inizio
della stringa nell'array, in modo tale da ottenere anche una certa
flessibilità (penso che tutti abbiate presente il type-ahead della
ricerca di firefox o il classico campo input gestito via ajax).

Preoccuparmi di PHP 6 mi pare un po' pretestuosa come argomentazione,
anche perché ti potrei rispondere citando la mia versione del manuale
(datata 14-02-2005 sezione Types > Strings):

"Note:  For backwards compatibility, you can still use array-brackets
for the same purpose. However, this syntax is deprecated as of PHP 4"

Che dice praticamente il contrario della versione attualmente
online. Indubbiamente devo aggiornala! :-D

Riproviamoci insieme, Cris!

-- 
"Uhm... l'ho detto o l'ho solo pensato?"
.::. Ziabice aka Luca Gambetta .::.


More information about the Php-it mailing list