Explode è usato per dividere facilmente una stringa con un separatore.
Supporto | PHP 4 e successivi |
---|---|
Breve descrizione | Dividere una stringa in una matrice per separatore. |
Requisiti. | |
Nota | Non può inserire un array, solo una stringa. |
Spesso abbiamo bisogno di dividere una stringa secondo qualche semplice regola. Per esempio, un elenco di numeri separati da virgole.
La funzione explode() è ottima per questo, prendendo il separatore (che separa la stringa) come primo parametro e i dati stessi come secondo parametro:
$cisla = '3, 1, 4, 1, 5, 9';$parser = explode(',', $cisla);foreach ($parser as $cislo) {echo $cislo . '<br>';// Qui possiamo elaborare ulteriormente i numeri}
Ma cosa succede se i numeri sono separati da virgole, ma ci sono spazi intorno?
La soluzione è quella di analizzare per la più piccola sottostringa comune e poi rimuovere i caratteri indesiderati intorno ad essa (spazi e altri spazi bianchi):
$cisla = '3, 1,4, 1 , 5 ,9';$parser = explode(',', $cisla);foreach ($parser as $cislo) {echo trim($cislo) . '<br>';// Qui possiamo elaborare ulteriormente i numeri}
In questo caso, la funzione trim()
rimuove elegantemente gli spazi bianchi intorno ai caratteri (spazi, tabulazioni, interruzioni di riga, ...), dando solo dati puliti.
CONSIGLIO: Per molti esempi, explode() non è adatto ed è molto meglio usare le espressioni regolari.
Tuttavia, spesso vogliamo analizzare i dati solo fino a una certa distanza, e il terzo parametro (opzionale) limit può essere usato per questo scopo.
Per esempio, abbiamo dati strutturati separati da due punti dove vogliamo ottenere il contenuto dopo i primi due punti e ignorare gli altri due punti. Esempio:
$cas = 'formato: "j.n.Y - H:i"';
Se dovessimo analizzare la stringa solo come:
$parser = explode(':', $cas);
Otterremmo queste 3 sottostringhe (in altri casi potrebbero essercene molte di più):
'formato''"j.n.Y - H''i"'
Pertanto, impostiamo un limite a quanti elementi ottenere (ed eventualmente tutti gli altri elementi saranno aggiunti alla fine dell'ultimo elemento):
$parser = explode(':', $cas, 2);// torna indietro:echo $parser[0]; // formatoecho $parser[1]; // "j.n.Y - H:i"
Nota: Gli apici indesiderati possono essere rimossi dalla stringa, per esempio, usando la funzione
trim()
:
echo trim($parser[1], '"'); // il secondo parametro specifica la mappa dei caratteri da rimuovere
Spesso abbiamo bisogno di recuperare una stringa che è delimitata da altre due stringhe. Non c'è una funzione per questo direttamente in PHP, ma possiamo scriverla noi stessi:
function between(string $left, string $right, string $data): string{$l = explode($left, $data);$r = explode($right, $l[1]);return $r[0];}
Si può ottenere una suddivisione molto più elegante e lavorare con le stringhe usando espressioni regolari, che discuto in una pagina separata.
$ip = '10.0.0.138';$parser = explode('.', $ip);echo $parser[0]; // stampa "10"echo $parser[1]; // stampa "0";
La variabile $ip
contiene una stringa in ingresso che viene analizzata secondo il delimitatore .
, il ritorno è un array. L'analisi procede fino alla fine della stringa, a meno che non sia specificato un limite.
# | Tipo | Descrizione |
---|---|---|
1 | string | Stringa di separazione. |
2 | string | Stringa analizzata. |
3 | int | limite di analisi. Questo è un parametro opzionale. Esempio: |
$text = 'PHP è il mio linguaggio preferito!';$parser = explode('', $text, 1);echo $parser[0]; // stampa la prima parolaecho $parser[1]; // stampa il resto del testoecho $parser[2]; // non produce nulla perché è stato impostato un limite!
Il valore di ritorno è un array con una stringa analizzata.
Gli indici sono numerati da zero a X
a meno che non sia specificato un limite.
Versione PHP | Descrizione |
---|---|
5.1.0 | Aggiunto il supporto per il limite negativo sui passaggi. |
4.0.1 | Aggiunto il parametro opzionale limit. |
Quando si usa un limite negativo, viene dato il numero di elementi dalla fine della stringa.
Esempio:
$str = 'uno|due|tre|quattro';// limite positivoprint_r(explode('|', $str, 2));// limite negativo (da PHP 5.1)print_r(explode('|', $str, -1));
Verranno restituiti i seguenti campi:
Array([0] => one[1] => two|three|four)Array([0] => one[1] => two[2] => three)
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | it