Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250

    Aiuto conversione stringa

    ciao a tutti,
    una cortesia.. cè un modo semplice e veloce per convertire una stringa del genere 201003
    in "Marzo 2010" ?

  2. #2
    Codice PHP:
    function mese($data) {
        
    preg_match('/(....)(..)/'$data$match);
        
    setlocale('LC_ALL''it_IT.utf-8');
        return 
    strftime('%B %Y'mktime(0,0,0,$match[2],1,$match[1]));
    }
    echo 
    mese('201003'); 
    il valore da passare a setlocale dipende dal sistema su cui gira PHP.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    grandioso!!!!!!!!!
    Grazie 1000. Non riesco a capire però perchè mi esce questo errore:

    Codice PHP:
    Warningsetlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead
    Ho guardato la funzione setlocale, ma non mi sembra sia scritta sbagliata.
    Da cosa dipende?

  4. #4
    Si errore mio, togli gli apici intorno a LC_ALL

  5. #5
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da k.b
    Codice PHP:
    function mese($data) {
        
    preg_match('/(....)(..)/'$data$match);
        
    setlocale('LC_ALL''it_IT.utf-8');
        return 
    strftime('%B %Y'mktime(0,0,0,$match[2],1,$match[1]));
    }
    echo 
    mese('201003'); 
    il valore da passare a setlocale dipende dal sistema su cui gira PHP.
    preg_match('/(....)(..)/', $data, $match);

    ....

    setlocale('LC_ALL', 'it_IT.utf-8');

    ...

    strftime('%B %Y', mktime(0,0,0,$match[2],1,$match[1]));

    ...


    no è un pò dispendioso a livello di risorse solo per tirare fuori il mese?


    non sarebbe meglio il classico vecchio e arcaico metodo

    Codice PHP:

    <?php 

    function mese($str){
        
    $mesi=array(
            
    '01'=>'Gennaio',
            
    '02'=>'Febbraio',
            
    '03'=>'Marzo',
            
    '04'=>'Aprile',
            
    '05'=>'Maggio',        
            
    '06'=>'Giugno',
            
    '07'=>'Luglio',
            
    '08'=>'Agosto',
            
    '09'=>'Settembre',
            
    '10'=>'Ottobre',        
            
    '11'=>'Novembre',
            
    '12'=>'Dicembre'
            
    )
        return 
    $mesi[substr($str,-2)];
        }
    ?>
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  6. #6
    Originariamente inviato da dottwatson
    no è un pò dispendioso a livello di risorse solo per tirare fuori il mese?
    No, questo genere di micro-ottimizzazioni sono del tutto irrilevanti in un'applicazione PHP. Limare qualche microsecondo ha senso se devi scrivere un motore grafico ultra-ottimizzato e anche il singolo ciclo di clock del processore in piu' ti fa la differenza, ma in un'applicazione scritta in un linguaggio interpretato di alto livello, una (eventuale peraltro) differenza di velocita' di questo genere e' totalmente trascurabile.

    Usare gli strumenti che il PHP offre, e scrivere codice chiaro ed adattabile e' molto piu' importante: ad esempio, nel caso in questione se in futuro vuoi fare la stessa cosa con l'ouput in un'altra lingua, con strftime ti basta cambiare una costante, con l'array devi riscrivere a mano tutti i mesi.

    Davvero, in PHP le micro-ottimizzazioni sono al 99% uno spreco di tempo che sarebbe meglio speso migliorando altre parti del codice.

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da k.b
    No, questo genere di micro-ottimizzazioni sono del tutto irrilevanti in un'applicazione PHP.
    NI, nel senso che la differenza la fa anche il margine di utilizzo del codice.. se gli serve 1 tantum, sempre, o ha un ciclo di importazione e deve processare 50.000 stringhe diverse al giorno

    Usare gli strumenti che il PHP offre, e scrivere codice chiaro ed adattabile e' molto piu' importante: ad esempio, nel caso in questione se in futuro vuoi fare la stessa cosa con l'ouput in un'altra lingua, con strftime ti basta cambiare una costante, con l'array devi riscrivere a mano tutti i mesi.
    vero, ma adattabile implica abche 'non invadente'... un setlocale() non potrebbe esserlo?

    Davvero, in PHP le micro-ottimizzazioni sono al 99% uno spreco di tempo che sarebbe meglio speso migliorando altre parti del codice.
    anche il tipo usati per il testo apici fanno la differenza in tempi di resa
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    Originariamente inviato da dottwatson
    NI, nel senso che la differenza la fa anche il margine di utilizzo del codice.. se gli serve 1 tantum, sempre, o ha un ciclo di importazione e deve processare 50.000 stringhe diverse al giorno
    Gia', ma all'atto pratico quanta differenza fa? Difficile dirlo, bisogna ogni volta fare dei benchmark per scoprire che dopo 50k iterazioni tra le due soluzioni c'e' una differenza di 0,012 secondi quando il tempo di risposta di una pagina dipende per la maggior parte da fattori esterni alla pura elaborazione del codice (interazione col db, caricamento di risorse esterne, latenza di rete, etc.). Non dico che le micro-ottimizzazioni non servano a *niente*, dico che:

    - e' difficile/impossibile capire a occhio se una cosa e' piu' veloce di un'altra
    - prima di passare a queste cose c'e' un grosso elenco di altre ottimizzazioni di livello molto piu' alto che vengono trascurate nella maggior parte degli script (specie quelli che vedi su questo forum)

    Poi in genere le regexp vengono scartate come "troppo lente" perche' ormai fa moda dirlo e - mio parere - perche' pochi le conoscono abbastanza bene da capire quanto un pattern sia molto piu' leggibile, versatile e comodo che scrivere degli indici numerici in una substr() (peraltro nel tuo codice alternativo dovrestri chiamare substr 2 volte perche' serve anche l'anno).

    Originariamente inviato da dottwatson
    vero, ma adattabile implica abche 'non invadente'... un setlocale() non potrebbe esserlo?
    In che modo e' invadente? In teoria setlocale() e' una cosa che chiami una volta in un pezzo di codice che includi in tutte le pagine se devi fare un'applicazione localizzata. Mi sembrano piu' invadenti n array con i mesi in varie lingue


    Originariamente inviato da dottwatson
    anche il tipo usati per il testo apici fanno la differenza in tempi di resa
    Non ho capito...

  9. #9
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da k.b
    Gia', ma all'atto pratico quanta differenza fa? Difficile dirlo, bisogna ogni volta fare dei benchmark per scoprire che dopo 50k iterazioni tra le due soluzioni c'e' una differenza di 0,012 secondi quando il tempo di risposta di una pagina dipende per la maggior parte da fattori esterni alla pura elaborazione del codice (interazione col db, caricamento di risorse esterne, latenza di rete, etc.). Non dico che le micro-ottimizzazioni non servano a *niente*, dico che:

    - e' difficile/impossibile capire a occhio se una cosa e' piu' veloce di un'altra
    - prima di passare a queste cose c'e' un grosso elenco di altre ottimizzazioni di livello molto piu' alto che vengono trascurate nella maggior parte degli script (specie quelli che vedi su questo forum)

    Poi in genere le regexp vengono scartate come "troppo lente" perche' ormai fa moda dirlo e - mio parere - perche' pochi le conoscono abbastanza bene da capire quanto un pattern sia molto piu' leggibile, versatile e comodo che scrivere degli indici numerici in una substr() (peraltro nel tuo codice alternativo dovrestri chiamare substr 2 volte perche' serve anche l'anno).


    In che modo e' invadente? In teoria setlocale() e' una cosa che chiami una volta in un pezzo di codice che includi in tutte le pagine se devi fare un'applicazione localizzata. Mi sembrano piu' invadenti n array con i mesi in varie lingue



    Non ho capito...
    mi sono incartato nello scrivere
    la frase doveva essere
    anche il tipo di apici usati per il testo hanno la differenza in tempi di resa

    quando parlo di invadenza, parlo di script i quali, per produrre il risultato ottenuto, non vadano ad influire su impostazioni e/o richiamare funzionalità dell' OS, che possano produrre quindi impostazioni di carattere globale che produrrebbero potenziali errori e/o conflitti

    ho a che fare con circa 800 siti l'anno, di cui uan parte è sviluppata in maniera interna e un' altra proviene dall' esterno e ti posso garantire che che l' invadenza di uno script è una cosa che fa veramente incazzare quando influisce su di te
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  10. #10
    Ok, sono d'accordo se parli di cose come system('/bin/ls -laF') ma setlocale() che c'entra?

    Per quanto riguarda gli apici, hai visto doppie virgolette nel mio codice sopra?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.