Come posso dividere una stringa delimitata da virgole in un array in PHP?


277

Ho bisogno di dividere la mia stringa di input in un array alle virgole.

Come posso ottenere questo risultato?

Ingresso:

9,admin@example.com,8

9
Solo una nota, le persone ti stanno votando negativamente a causa della quantità minima di informazioni e della domanda formulata male.
Troggy

@ Troggy - durante la mia modifica ho deciso di cambiarlo in inglese leggibile, ma poi ho capito che probabilmente sarebbe stato solo un duplicato di molte altre domande
John Rasch

3
Nessuna domanda è troppo semplice, ma potresti considerare di dare un'occhiata alle funzioni del gestore di stringhe. Non perché sia ​​una brutta domanda, ma trovare qualcosa nei documenti è piacevole e talvolta più veloce.
Csaba Kétszeri

Risposte:


581

Prova a esplodere :

$myString = "9,admin@example.com,8";
$myArray = explode(',', $myString);
print_r($myArray);

Produzione :

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)

1
Come puoi contare? .lengh?

2
Un modo è usare count () (aka sizeof) - php.net/manual/en/function.count.php
Matthew Groves

2
@McLosysCreative Potrebbe piacerti anche var_dumpche fornisce informazioni più dettagliate. Ancora più utile è var_export($myArray, true)perché restituisce l'output di var_dumpcome una stringa in modo da poterlo memorizzare in qualche registro senza interrompere il sito generato ...
Tomasz Kapłoński

60
$myString = "9,admin@example.com,8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

Produzione

9
admin@example.com
8

1
Il tuo loop alla fine non si riferiva direttamente alla domanda, ma era rilevante per il mio problema. Grazie per questo!
Jesse Steele

36
$string = '9,admin@google.com,8';
$array = explode(',', $string);

Per situazioni più complicate, potrebbe essere necessario utilizzare preg_split.


30

Se quella stringa proviene da un file csv, la userei fgetcsv()(o str_getcsv()se hai PHP V5.3). Ciò ti consentirà di analizzare correttamente i valori quotati. Se non è un csv, explode()dovrebbe essere la scelta migliore.


2

Codice:

$string = "9,admin@example.com,8";

$array  = explode(",", $string);

print_r($array);

$no = 1;
foreach ($array as $line) {
    echo $no . ". " . $line . PHP_EOL;
    $no++;
};

In linea:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/pGEAlb" ></iframe>


2

E se vuoi che le tue parti contengano virgole? Bene, citali. E poi le citazioni? Bene, raddoppiali. In altre parole:

part1,"part2,with a comma and a quote "" in it",part3

PHP fornisce la funzione https://php.net/str_getcsv per analizzare una stringa come se fosse una riga in un file CSV che può essere utilizzata con la riga sopra invece di explode:

print_r(str_getcsv('part1,"part2,with a comma and a quote "" in it",part3'));
Array
(
    [0] => part1
    [1] => part2,with a comma and a quote " in it
    [2] => part3
)

1

explode ha alcuni grossi problemi nell'utilizzo nella vita reale:

count(explode(',', null)); // 1 !! 
explode(',', null); // [""] not an empty array, but an array with one empty string!
explode(',', ""); // [""]
explode(',', "1,"); // ["1",""] ending commas are also unsupported, kinda like IE8

questo è il motivo per cui preferisco preg_split

preg_split('@,@', $string, NULL, PREG_SPLIT_NO_EMPTY)

l'intero boilerplate:

/** @brief wrapper for explode
 * @param string|int|array $val string will explode. '' return []. int return string in array (1 returns ['1']). array return itself. for other types - see $as_is
 * @param bool $as_is false (default): bool/null return []. true: bool/null return itself.
 * @param string $delimiter default ','
 * @return array|mixed
 */
public static function explode($val, $as_is = false, $delimiter = ',')
{
    // using preg_split (instead of explode) because it is the best way to handle ending comma and avoid empty string converted to ['']
    return (is_string($val) || is_int($val)) ?
        preg_split('@' . preg_quote($delimiter, '@') . '@', $val, NULL, PREG_SPLIT_NO_EMPTY)
        :
        ($as_is ? $val : (is_array($val) ? $val : []));
}

preferisco di gran lunga questa risposta, poiché preg_split è molto più a prova di errore, quando contiene input dell'utente.
Stender

0

In modo semplice puoi andare con explode($delimiter, $string);

Ma in senso lato, con la programmazione manuale:

        $string = "ab,cdefg,xyx,ht623";
        $resultArr = [];
        $strLength = strlen($string);
        $delimiter = ',';
        $j = 0;
        $tmp = '';
        for ($i = 0; $i < $strLength; $i++) {
            if($delimiter === $string[$i]) {
                $j++;
                $tmp = '';
                continue;
            }
            $tmp .= $string[$i];
            $resultArr[$j] = $tmp;
        }

Outpou: print_r($resultArr);

Array
(
    [0] => ab
    [1] => cdefg
    [2] => xyx
    [3] => ht623
)

0

La scelta migliore è usare la funzione "explode ()".

$content = "dad,fger,fgferf,fewf";
$delimiters =",";
$explodes = explode($delimiters, $content);

foreach($exploade as $explode) {
    echo "This is a exploded String: ". $explode;
}

Se vuoi un approccio più veloce puoi usare uno strumento delimitatore come Delimiters.co Ci sono molti siti web come questo. Ma preferisco un semplice codice PHP.


0

Usa la funzione explode () o preg_split () per dividere la stringa in php con un delimitatore dato

// Use preg_split() function 
$string = "123,456,78,000";  
$str_arr = preg_split ("/\,/", $string);  
print_r($str_arr); 
  
// use of explode 
$string = "123,46,78,000"; 
$str_arr = explode (",", $string);  
print_r($str_arr); 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.