Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208

    explode separatori multipli

    Salve,
    sto pulendo dei dati e mi ritrovo nella condizione di dover impostare una funzione explode() su una stringa senza sapere a priori quale sarà il separatore giusto.

    Ho pensato questo:

    Codice PHP:
    $separatori = array ("\\""-"" ",);

    public function 
    Separa($string$separatori) {
               foreach (
    $separatori as $delimiter) {
                      
    $explode explode ($delimiter$string);
          }
          return 
    $explode;

    Considerato che la lista precisa dei separatori utilizzati (ah, che dolore gli inserimenti manuali liberi) ce l'ho, tecnicamente se io passo la stringa qui dentro, lui dovrebbe riuscire a separare a prescindere da quello usato o sbaglio?

    Seconda cosa, se invece non c'è il separatore, secondo voi mi ritorna $string così come passato in partenza?

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    se invece non c'è il separatore, secondo voi mi ritorna $string così come passato in partenza?
    Ti restituisce un array con un solo elemento (la stringa originale).

    mi ritrovo nella condizione di dover impostare una funzione explode() su una stringa senza sapere a priori quale sarà il separatore giusto.
    Se non sai a priori quale sarà il separatore da utilizzare, lo devi identificarle. Quali sono le condizioni che deve soddisfare la tua stringa affinché venga utilizzato un separatore al posto di un altro? Oppure hai bisogno avere un array che contenga la stringa separata utilizzando tutti i separatori possibili? Se fai un esempio mi chiarisci cosa vuoi ottenere.

    lui dovrebbe riuscire a separare a prescindere da quello usato o sbaglio?
    Non mi è molto chiara questa frase.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Allora, nel medesimo campo excel io posso trovare sia "giallo/rosso" che "giallo-rosso" che "giallo_rosso". Dove sia "giallo" sia "rosso" sono due parole valide, ma che per limiti di spazi d'inserimento (è un travaso di dati da piattaforma vecchia) sono stati messi nella stessa casella.

    il senso è che io in excel vedo bene quali sono i casi specifici, ma non vorrei toccarli prima di averli trasportati perché solo da dentro la nuova piattaforma riuscirò a capire bene cosa mi serve e cosa no. Come dicevo sopra, sto pelando una brutta gatta su dati inseriti veramente male. L'array separatori mi è utile proprio a parlare le varie possibilità e ad inserire l'elemento [0] che ne viene fuori senza stare troppo a sottilizzare su quale sia il contenuto. Il senso è questo.

  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Allora dovrebbe essere sufficiente controllare che la stringa venga spezzata. Se trovi che uno dei possibili separatori "funziona" allora è quello. Potresti farlo con qualcosa del genere:

    codice:
    function separa($string, $separatori) {
          foreach ($separatori as $delimiter) {
                $ret = explode ($delimiter, $string);
                if (count($ret) > 1) { // o se sei sicuro che sono sempre e solo due usa: count($ret) == 2
                    return $ret;
                }
          }
    
          // se arrivo qui nessun separatore è entrato "in azione".
          return false; // oppure restituisci $string
    }
    
    $separatori = array ("\\", "-", " ",);
    
    var_dump(separa('rosso\giallo', $separatori));
    var_dump(separa('rosso-giallo', $separatori));
    var_dump(separa('rosso giallo', $separatori));
    var_dump(separa('rosso', $separatori)); // false
    Ultima modifica di .Kurt; 08-01-2015 a 22:55

  5. #5
    Se bastano i separatori: "/, \, |, -, _" , ecco uno snippet per te, risolvi tutto con 1 riga di codice con le espressioni regolari (tutto il resto dello snippet è solo per testare il funzionamento). Se hai bisogno di altri separatori fammi sapere che te li aggiungo.

    Codice PHP:
    <?php
    $frasi 
    = array();
    $frasi[] = 'giallo rosso';
    $frasi[] = 'giallo_rosso';
    $frasi[] = 'giallo-rosso';
    $frasi[] = 'giallo\rosso';
    $frasi[] = 'giallo/rosso';
    $frasi[] = 'giallo!rosso';
    $frasi[] = 'giallo e rosso';

    // riconosce i separatori: /, \, |, -, _
    foreach($frasi as $frase){
        echo 
    'frase iniziale: '.$frase.'<br />';
        echo  
    'frase elaborata: '.preg_replace('#[/\|\-_! \\\]#',' ',$frase);
        echo 
    '<hr />';
    }
    ?>
    Ultima modifica di Infocurci; 09-01-2015 a 11:26
    Pensate i programmi a librerie, e innalzate il livello d'astrazione

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Grazie Kurt e grazie Infocurci,
    la soluzione giusta è più quella di Kurt, visto che poi l'explode devo materialmente farlo. Nel frattempo ho stabilito che il dato più attendibile è sempre il primo, quindi potrei volendo ignorare l'elemento [1] dell'array.

    In ogni caso volevo togliermi un dubbio, e questo breve scambio ha appianato quanto avevo in sospeso.
    Grazie mille!

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.