[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