Buon giorno,
Qualcuno sà come far tagliare una stringa da destra verso sinistra fino al primo spazio,
esempio:
"Seattle Sonics" diventa "Sonics"
Grazie mille
![]()
Buon giorno,
Qualcuno sà come far tagliare una stringa da destra verso sinistra fino al primo spazio,
esempio:
"Seattle Sonics" diventa "Sonics"
Grazie mille
![]()
LoginDOT.com || Directory gratuita
Aggiungete i vostri siti gratuitamente, back link non necessario, ma gradito.
Ciao,
se quello fosse l'esempio ti direi di utilizzare explode (la funzione più rapida) e prendere l'ultimo elemento dell'array
per favore NIENTE PVT TECNICI da sconosciuti
Originariamente inviato da Fabio Heller
Ciao,
se quello fosse l'esempio ti direi di utilizzare explode (la funzione più rapida) e prendere l'ultimo elemento dell'arrayCacchio hai ragione... mi ero fissato con il visualbasic e non ho pensato all'explode del PHP.... grazie mille
![]()
LoginDOT.com || Directory gratuita
Aggiungete i vostri siti gratuitamente, back link non necessario, ma gradito.
mmm xo se è un'operazione che devi eseguire TANTE volte...
+/- è questa la rigacodice:$sottostringa = substr($stringa, 0, strpos($stringa, ' ')-1);![]()
The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand
explode, da benchmark fatti a suo tempo, è più performante di qualsiasi altra funzione per le stringhe![]()
per favore NIENTE PVT TECNICI da sconosciuti
:master: :master: :master:Originariamente inviato da Fabio Heller
explode, da benchmark fatti a suo tempo, è più performante di qualsiasi altra funzione per le stringhe![]()
lo so che stiamo andando ot con il thread ma come è possibile che se esplodo una stringa o lancio un substr è + veloce l'esplode del substr? :master:
forse è dovuto al fatto che php deve interpretare 2 operazioni invece di una, non ci trovo altra motivazione![]()
The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand
La ragione principale è sicuramente quella, devi chiamare due funzioni per fare una cosa che con explode fai in una.Originariamente inviato da daniele_dll
:master: :master: :master:
lo so che stiamo andando ot con il thread ma come è possibile che se esplodo una stringa o lancio un substr è + veloce l'esplode del substr? :master:
forse è dovuto al fatto che php deve interpretare 2 operazioni invece di una, non ci trovo altra motivazione![]()
Inoltre mi dicono che substr, strstr etc. non sono particolarmente performanti di loro...tu che ogni tanto dai un'occhiata ai sorgenti C forse puoi capire perchè![]()
per favore NIENTE PVT TECNICI da sconosciuti
lol ora guardo, xo c'ho i sorgenti del 5, ma non credo cambi moltoOriginariamente inviato da Fabio Heller
La ragione principale è sicuramente quella, devi chiamare due funzioni per fare una cosa che con explode fai in una.
Inoltre mi dicono che substr, strstr etc. non sono particolarmente performanti di loro...tu che ogni tanto dai un'occhiata ai sorgenti C forse puoi capire perchè![]()
The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand
mmm
credo che sia tutto dovuto proprio al fatto che php si trova costretto a richiamare + volte funzioni che richiama comunque lui stesso all'interno di explode
non sono xo riuscito a trovare riferimento a questa funzione anche se dal nome e dai parametri si intuisce che cerca all'interno di una stringa per dei caratteri e restituisce la posizione della stringacodice:found = php_memnstr(Z_STRVAL_PP(haystack) + offset, Z_STRVAL_PP(needle), Z_STRLEN_PP(needle), Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
anche xche poi
restituisce proprio quello che trova ^^codice:RETURN_LONG(found - Z_STRVAL_PP(haystack));
mentre substr è abbastanza semplice...semplicemente estrae la sotto striga
praticamente fa tutto qui...
probabilmente è definita dentro lo zend enginecodice:RETURN_STRINGL(Z_STRVAL_PP(str) + f, l, 1);
mentre l'explode fa questo...
in pratica in p1 inserisce un puntatore alla memoria dove lo zend engine tiene la variabile, mentre in p2 ritorna la posizione del carattere richiesto dentro la stringacodice:p1 = Z_STRVAL_P(str); p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp); if (p2 == NULL) { add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1); } else { do { add_next_index_stringl(return_value, p1, p2 - p1, 1); p1 = p2 + Z_STRLEN_P(delim); } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL && (limit == -1 || --limit > 1)); if (p1 <= endp) add_next_index_stringl(return_value, p1, endp-p1, 1); }
tanto che dopo fa un if per vedere se p2 è vuoto è usa
la funzione add_next_index_stringl (che credo il nome dica tutto) per aggiugnere al valore di ritorno tutta la riga interacodice:add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1);
altrimenti
usando un do while inserisce nell'array la prima posizione interessata e per farlo passa come 3 parametro la sottrazione tra i due puntatori, (dato che sono numerici e si riferiscono tutti e due alla stessa stringa e p2 è la posizione trovata) e poi sposta la posizione nella memoria relativa a p1 di p2 + la lunghezza del delimitatorecodice:do { add_next_index_stringl(return_value, p1, p2 - p1, 1); p1 = p2 + Z_STRLEN_P(delim); } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL && (limit == -1 || --limit > 1)); if (p1 <= endp) add_next_index_stringl(return_value, p1, endp-p1, 1);
e lancia il while
ora qui mi fermo xche già mi sono perso abbastanza
cmq...si...decisamente usando quelle due distinte funzioni php deve fare parecchio lavoro in +
![]()
The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand
Perchè non postare anche un po' di codice assembly dell'ultima versione del kernel, già che ci siamo ? :rollo:
Qui si va oltre il concetto di Off Topic, e non serve di certo un moderatore rompiscatole per capirlo
Visto che Andreace86 ha risolto il problema chiudo il thread, per evitare tentazioni di continuare la discussione
Addio Aldo, amico mio... [03/12/70 - 16/08/03]