Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150

    Spazi di troppo nelle stringhe

    Salve,
    se io una stringa e voglio eliminare gli spazi vuoti all'inizio e alla fine, basta usare la funzione trim(). Ma se gli spazi tra le parole che costituiscono una stringa sono più di uno, come si fa a lasciarne solo uno..?

    Se ad esempio ho la stringa:

    Codice PHP:
    $str "Oggi   è     una         brutta giornata"
    come si può fare per trasformarla in:

    Codice PHP:
    $str "Oggi è una brutta giornata"
    ??


    Credo che occorra qualche espressione regolare. Ma su esse non ho alcuna conoscenza

    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Puoi usare una regexp ma non solo.

    Codice PHP:
    <?php
    $str0 
    "";
    $str1 "Oggi   è     una         brutta giornata";
    print 
    "Prima : $str1<br/>";
    while (
    $str0 <> $str1) {
        
    $str0 $str1;
        
    $str1 str_replace('  ',' ',$str1);
    }

    print 
    "Dopo : $str1<br/>";
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Puoi usare una regexp ma non solo.

    Codice PHP:
    <?php
    $str0 
    "";
    $str1 "Oggi   è     una         brutta giornata";
    print 
    "Prima : $str1<br/>";
    while (
    $str0 <> $str1) {
        
    $str0 $str1;
        
    $str1 str_replace('  ',' ',$str1);
    }

    print 
    "Dopo : $str1<br/>";
    ?>
    Grazie badaze !! Carino questo algoritmo!! Non l'ho provato ma credo che funzioni (anche se penso che per <> intendevi !=).
    Se mi ci mettevo può darsi che ci arrivavo anche io a farlo....ma volevo sapere se c'è una espressione regolare da utilizzare in merito. Credo sia più elegante o no?

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    != == <>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non so se una regexp è più elegante. Comunque.

    Codice PHP:
    <?php
    $pattern 
    "/\s{2,}/";

    $str1 "Oggi   è     una         brutta giornata    del  cavolo";  
    print 
    "Prima : $str1<br/>";
    $str2 preg_replace($pattern,' ',$str1);
    print 
    "Dopo : $str2<br/>";
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    ciao badaze,

    sto cercando di usare il codice che hai scritto per aggiornare i campi di una tabella ma non ci riesco potresti aiutarmi?

    questo è il mio codice;
    Codice PHP:
    $query_nome mysql_query("
    SELECT    
    nome
    FROM
    utenti
    GROUP BY nome
    ORDER BY nome ASC
    "
    );
    while(
    $elimina_doppi mysql_fetch_array($query_nome))
    {        
    //tolgo gli spazi dai nomi 
    $pattern "/\s{2,}/";    
    $nome $elimina_doppi['nome'];      
    $nome_ok preg_replace($pattern,' ',$nome);
    $aggiorna mysql_query("
    UPDATE 
    utenti
    SET 
    nome = trim('
    $nome_ok'),
    WHERE
    nome = 
    $nome
    "
    ); 
    pur eseguendo lo script il campo nome rimane con i doppi o tripli spazi, puoi aiutarmi?

    inoltre consigliami anche sul codice che ho scritto, fammi capire come migliorarlo.

    Grazie
    Ultima modifica di BarakObama; 26-02-2015 a 14:37

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    Grazie tanto badaze.
    Non mi ero accorto che mi avessi ri-risposto fornendomi anche la soluzione in termini di espressione regolare.

    Ad ogni modo funzionano entrambe le soluzioni.

    Per quanto riguarda l' "eleganza" forse ho usato un termine sbagliato. Sarebbe più proprio usare il termine efficienza nel senso di ottenere un egual risultato con meno istruzioni possibili e meno elaborazioni possibili (in questo caso si evitano un numero X di cicli while velocizzando l'operazione).
    Da ignorante mi viene da pensare così. Se poi sia giusto o sbagliato non lo so..

    Comunque grazie ancora

  8. #8
    secondo me funziona anche solo semplicemente così:
    Codice PHP:
        $str '                                        ciao           dove  vai?  ';  
          
        
        
    $str1 str_replace('  ',' '$str);  
          
         
        echo 
    $str1;  
        
    ?> 
    perché se ci sono 3 spazi, ne toglie uno, però rimangono di nuovo 2 spazi così toglie l'altro, insomma alla fine anceh 10 spazi alla fine li toglie tutti, facendo un ciclo , spero di essermi spiegata
    Ultima modifica di nivasio; 06-11-2014 a 16:14 Motivo: testo nel codice
    Un tardo hegeliano di Busalla / allevava un gorilla nella stalla
    citando Adorno nell notti chiare / finché il primate stanco di ascoltare
    lo strangolò con una sciarpa gialla Dillo Con Parole Sue

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da nivasio Visualizza il messaggio
    secondo me funziona anche solo semplicemente così:
    Codice PHP:
        $str '                                        ciao           dove  vai?  ';  
          
        
        
    $str1 str_replace('  ',' '$str);  
          
         
        echo 
    $str1;  
        
    ?> 
    perché se ci sono 3 spazi, ne toglie uno, però rimangono di nuovo 2 spazi così toglie l'altro, insomma alla fine anceh 10 spazi alla fine li toglie tutti, facendo un ciclo , spero di essermi spiegata
    Purtroppo no.
    Rimpiazza i due primi spazi con uno. Rimpiazza i due seguenti con uno. Hai dunque due spazi dopo il rimpiazzamento di quattro spazi quando str_replace si occupa del quinto e del sesto spazi della stringa originale, etc... str_replace non torna indietro, va sempre avanti.

    Ho messo delle u al posto degli spazi per mostrarti il funzionamento di str_replace
    codice:
    Prima del replace :
    uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuciaouuuuuuuuuuudoveuuvai?uu
    codice:
    Differenti stati del str_replace
    str_replace 1 : uuuuuuuuuuuuuuuuuuuuciaouuuuuudoveuvai?u
    str_replace 2 : uuuuuuuuuuciaouuudoveuvai?u
    str_replace 3 : uuuuuciaouudoveuvai?u
    str_replace 4 : uuuciaoudoveuvai?u
    str_replace 5 : uuciaoudoveuvai?u
    str_replace 6 : uciaoudoveuvai?u
    Quindi il ciclo ci vuole.

    spero di essermi spiegato.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    ho capito però mi sembra che rimanga solo il primo e l'ultimo quindi basterebbe fare un trim alla fine: echo trim($str1); cmq va benissimo come avete fatto prima voi, era per far qualcosa
    Un tardo hegeliano di Busalla / allevava un gorilla nella stalla
    citando Adorno nell notti chiare / finché il primate stanco di ascoltare
    lo strangolò con una sciarpa gialla Dillo Con Parole Sue

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 © 2026 vBulletin Solutions, Inc. All rights reserved.