Wie kann ich eine durch Kommas getrennte Zeichenfolge in PHP in ein Array aufteilen?

263

Ich muss meine Zeichenfolgeneingabe durch Kommas in ein Array aufteilen.

Wie kann ich dies erreichen?

Eingang:

9,admin@example.com,8
Kevin
quelle
8
Nur eine Anmerkung, die Leute stimmen Sie wegen der minimalen Menge an Informationen und der schlecht formulierten Frage ab.
Troggy
@Troggy - während meiner Bearbeitung wollte ich es in lesbares Englisch ändern, aber dann wurde mir klar, dass es wahrscheinlich nur ein Duplikat vieler anderer Fragen sein würde
John Rasch
3
Keine Frage ist zu einfach, aber Sie sollten sich die Funktionen des String-Handlers ansehen. Nicht weil es eine schlechte Frage ist, sondern etwas in den Dokumenten zu finden, fühlt sich gut und manchmal schneller an.
Csaba Kétszeri

Antworten:

553

Versuchen explodieren :

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

Ausgabe :

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)
Matthew Groves
quelle
1
Wie können Sie zählen? .lengh?
liefern
2
Eine Möglichkeit ist die Verwendung von count () (auch bekannt als sizeof) - php.net/manual/en/function.count.php
Matthew Groves
2
@McLosysCreative Vielleicht gefällt Ihnen auch, var_dumpwelche Informationen detaillierter sind. Noch nützlicher ist, var_export($myArray, true)dass die Ausgabe var_dumpals Zeichenfolge zurückgegeben wird, sodass Sie sie in einem Protokoll speichern können, ohne die generierte Site zu
beschädigen
57
$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

Ausgabe

9
admin@example.com
8
Jakir Hossain
quelle
1
Ihre Schleife am Ende bezog sich nicht direkt auf die Frage, war aber für mein Problem relevant. Danke dafür!
Jesse Steele
30

Wenn diese Zeichenfolge aus einer CSV-Datei stammt, würde ich verwenden fgetcsv()(oder str_getcsv()wenn Sie PHP V5.3 haben). Auf diese Weise können Sie zitierte Werte korrekt analysieren. Wenn es kein CSV ist, explode()sollte die beste Wahl sein.

Soulmerge
quelle
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++;
};

Online:

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

Anteliebe
quelle
0

Auf einfache Weise können Sie mit gehen explode($delimiter, $string);

Aber im Großen und Ganzen mit manueller Programmierung:

        $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
quelle
0

Am besten verwenden Sie die Funktion "explode ()".

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

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

Wenn Sie einen schnellen wollen nähern können Sie ein Trennzeichen - Tool wie verwenden Delimiters.co Es gibt viele Websites wie diese. Aber ich bevorzuge einen einfachen PHP-Code.

Mark William
quelle
0

explode hat einige sehr große Probleme im realen Gebrauch:

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

deshalb bevorzuge ich preg_split

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

die gesamte Kesselplatte:

/** @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
quelle