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

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,admin@example.com,8";
$myArray = explode(',', $myString);
print_r($myArray);

Production :

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

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,admin@example.com,8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

Production

9
admin@example.com
8

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

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

Pour les situations plus compliquées, vous devrez peut-être utiliser preg_split.


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.


2

Code:

$string = "9,admin@example.com,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>


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
)

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.


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 : []));
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.