如何在PHP中将逗号分隔的字符串拆分为数组?


263

我需要在逗号处将字符串输入拆分为一个数组。

我该如何做到这一点?

输入:

9,admin@example.com,8

8
只需说明一下,由于信息量最少和措辞不佳,人们对您投了反对票。
Troggy

@Troggy-在编辑期间,我打算将其更改为清晰的英语,但是后来我意识到,它可能只是许多其他问题的重复
John Rasch

3
毫无疑问,这太基本了,但是您可以考虑看看字符串处理程序函数。并不是因为这是一个不好的问题,而是在文档中找到东西感觉很好,有时甚至更快。
CsabaKétszeri'09年

Answers:


553

尝试爆炸

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

输出:

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

1
如何获得计数?.lengh?
2015年

2
一种方法是使用count()(aka sizeof)-php.net/manual/en/function.count.php
马修·格罗夫斯

2
@McLosysCreative您可能还会喜欢var_dump,它提供了更详细的信息。更为有用的是,var_export($myArray, true)因为它var_dump以字符串形式返回输出,所以您可以将其存储在某些日志中而不会破坏生成的站点...
TomaszKapłoński16

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

输出量

9
admin@example.com
8

1
您最后的循环与问题没有直接关系,但与我的问题有关。谢谢你!
杰西·斯蒂尔

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

对于更复杂的情况,您可能需要使用preg_split



2

码:

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

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

print_r($array);

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

线上:

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


0

用简单的方式就可以 explode($delimiter, $string) ;

但是从广义上讲,通过手动编程:

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

输出: print_r($resultArr);

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

0

最好的选择是使用函数“ explode()”。

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

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

如果需要更快的方法,可以使用Delimiters.co之类的定界工具。有很多这样的网站。但是我更喜欢简单的PHP代码。


0

explode 在现实生活中有一些很大的问题:

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

这就是为什么我更喜欢preg_split

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

整个样板:

/** @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 : []));
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.