Comment puis-je diviser une chaîne délimitée par des virgules en un tableau en PHP?

263

J'ai besoin de diviser mon entrée de chaîne en un tableau à la virgule.

Comment puis-je y parvenir?

Contribution:

9,admin@example.com,8
Kevin
la source
8
Juste une note, les gens vous votent en raison de la quantité minimale d'informations et d'une question mal formulée.
Troggy
@Troggy - lors de mon montage, j'ai décidé de le changer en anglais lisible, mais j'ai réalisé que ce ne serait probablement qu'un double de nombreuses autres questions
John Rasch
3
Aucune question n'est trop basique, mais vous pourriez envisager de jeter un œil aux fonctions du gestionnaire de chaînes. Pas parce que c'est une mauvaise question, mais trouver quelque chose dans les documents se sent bien et parfois plus rapidement.
Csaba Kétszeri

Réponses:

553

Essayez d' exploser :

$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
print_r($myArray);

Production :

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)
Matthew Groves
la source
1
Comment pouvez-vous compter? .lengh?
livrez
2
Une façon consiste à utiliser count () (aka sizeof) - php.net/manual/en/function.count.php
Matthew Groves
2
@McLosysCreative Vous aimerez aussi var_dumpqui donne des informations plus détaillées. Encore plus utile var_export($myArray, true)parce qu'il renvoie la sortie de var_dumpsous forme de chaîne afin que vous puissiez le stocker dans un journal sans casser le site généré ...
Tomasz Kapłoński
58
$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

Production

9
admin@example.com
8
Jakir Hossain
la source
1
Votre boucle à la fin ne se rapportait pas directement à la question, mais elle était pertinente pour mon problème. Merci pour cela!
Jesse Steele
30

Si cette chaîne provient d'un fichier csv, j'utiliserais fgetcsv()(ou str_getcsv()si vous avez PHP V5.3). Cela vous permettra d'analyser correctement les valeurs entre guillemets. Si ce n'est pas un csv, explode()devrait être le meilleur choix.

soulmerge
la source
2

Code:

$string = "9,[email protected],8";

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

print_r($array);

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

En ligne:

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

antelove
la source
0

De manière simple, vous pouvez aller avec explode($delimiter, $string);

Mais d'une manière générale, avec la programmation manuelle:

        $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
)
Gautam Rai
la source
0

Le meilleur choix est d'utiliser la fonction "explode ()".

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

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

Si vous voulez une approche plus rapide, vous pouvez utiliser un outil de délimitation comme Delimiters.co. Il existe de nombreux sites Web comme celui-ci. Mais je préfère un simple code PHP.

Mark William
la source
0

explode a de très gros problèmes dans l'utilisation réelle:

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

c'est pourquoi je préfère preg_split

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

l'ensemble du passe-partout:

/** @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 : []));
}
oriadam
la source