Jak mogę podzielić łańcuch rozdzielany przecinkami na tablicę w PHP?

263

Muszę podzielić mój ciąg znaków na tablicę w przecinkach.

Jak mogę to osiągnąć?

Wejście:

9,admin@example.com,8
Kevin
źródło
8
Tylko uwaga, ludzie cię głosują z powodu minimalnej ilości informacji i źle sformułowanych pytań.
Troggy
@Troggy - podczas mojej edycji postanowiłem zmienić go na czytelny angielski, ale potem zdałem sobie sprawę, że prawdopodobnie będzie to po prostu duplikat wielu innych pytań
John Rasch
3
Żadne pytanie nie jest zbyt proste, ale warto rozważyć funkcje obsługi ciągów. Nie dlatego, że to złe pytanie, ale znalezienie czegoś w dokumentacji jest przyjemne, a czasem szybsze.
Csaba Kétszeri

Odpowiedzi:

553

Spróbuj wybuchnąć :

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

Wynik :

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)
Matthew Groves
źródło
1
Jak możesz policzyć? .lengh?
wyślij
2
Jednym ze sposobów jest użycie count () (aka sizeof) - php.net/manual/en/function.count.php
Matthew Groves
2
@McLosysCreative Może Ci się również spodobać, var_dumpktóra zawiera bardziej szczegółowe informacje. Jeszcze bardziej przydatne jest var_export($myArray, true)to, że zwraca dane wyjściowe var_dumpjako ciąg znaków, dzięki czemu można przechowywać je w jakimś dzienniku bez przerywania generowanej strony ...
Tomasz Kapłoński,
58
$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

Wynik

9
admin@example.com
8
Jakir Hossain
źródło
1
Twoja pętla na końcu nie odnosiła się bezpośrednio do pytania, ale miała związek z moim problemem. Dzięki za to!
Jesse Steele,
30

Jeśli ten ciąg pochodzi z pliku csv, użyłbym fgetcsv()(lub str_getcsv()jeśli masz PHP V5.3). To pozwoli ci poprawnie przeanalizować podane wartości. Jeśli nie jest to csv, explode()powinien być najlepszym wyborem.

soulmerge
źródło
2

Kod:

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

antylopa
źródło
0

W prosty sposób możesz iść explode($delimiter, $string);

Ale w szerokim zakresie, dzięki programowaniu ręcznemu:

        $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
źródło
0

Najlepszym wyborem jest użycie funkcji „explode ()”.

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

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

Jeśli chcesz szybszego podejścia, możesz użyć narzędzia ograniczającego, takiego jak Delimiters.co. Istnieje wiele takich witryn. Ale wolę prosty kod PHP.

Mark William
źródło
0

explode ma pewne bardzo duże problemy w rzeczywistym użytkowaniu:

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

dlatego wolę preg_split

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

cała płyta kotła:

/** @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
źródło