csv 将逗号分隔的字符串拆分为数组?

xmakbtuz  于 12个月前  发布在  其他
关注(0)|答案(9)|浏览(123)

我需要将字符串输入在逗号处拆分为一个数组。
有没有一种方法可以将逗号分隔的字符串分解成一个平面的索引数组?
输入:

9,[email protected],8

输出量:

['9', 'admin@example', '8']
kmpatx3s

kmpatx3s1#

尝试explode

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

输出量:

Array
(
    [0] => 9
    [1] => [email protected]
    [2] => 8
)
ssm49v7z

ssm49v7z2#

$string = '9,[email protected],8';
$array = explode(',', $string);

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

webghufk

webghufk3#

如果该字符串来自csv文件,我将使用fgetcsv()(如果您有PHPV5.3,则使用str_getcsv())。这将使您能够正确地解析带引号的值。如果不是csv,explode()应该是最好的选择。

ep6jt1vc

ep6jt1vc4#

如果你想让你的部分包含逗号呢?好吧,引用它们。那报价呢好吧,加倍。换句话说:
part1,"part2,with a comma and a quote "" in it",part3
PHP提供了https://php.net/str_getcsv函数来解析字符串,就像它是CSV文件中的一行一样,可以与上面的一行而不是explode一起使用:

print_r(str_getcsv('part1,"part2,with a comma and a quote "" in it",part3'));
Array
(
    [0] => part1
    [1] => part2,with a comma and a quote " in it
    [2] => part3
)
pnwntuvh

pnwntuvh5#

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 : []));
}
vuktfyat

vuktfyat6#

使用explode()或preg_split()函数在PHP中使用给定的分隔符拆分字符串

// Use preg_split() function 
$string = "123,456,78,000";  
$str_arr = preg_split ("/\,/", $string);  
print_r($str_arr); 
  
// use of explode 
$string = "123,46,78,000"; 
$str_arr = explode (",", $string);  
print_r($str_arr);
f2uvfpb9

f2uvfpb97#

如果有人想用for-each将逗号分隔的字符串转换为列表项,那么它将帮助你...此代码用于刀片模板

@php
$data = $post->tags;
$sep_tag= explode(',', $data);
@endphp

@foreach ($sep_tag as $tag)
 <li class="collection-item">{{ $tag}}</li>
 @endforeach
rbpvctlc

rbpvctlc8#

//Re-usable function
function stringToArray($stringSeperatedCommas)
{
    return collect(explode(',', $stringSeperatedCommas))->map(function ($string) {
        return trim($string) != null ? trim($string) : null;
    })->filter(function ($string) {
        return trim($string) != null;
    });
}

//Usage
$array = stringToArray('abcd, , dsdsd, dsds');
print($array);

//Result
{ "abcd", "dsdsd", "dsds" }
hpxqektj

hpxqektj9#

逗号之间可以有空格。逗号之间也可能没有有用的数据。函数preg_split将有助于处理这些情况:

$str = "1,2 ,  ,4, ";

$arr = preg_split("/\s*,\s*/", $str, -1, PREG_SPLIT_NO_EMPTY);

print_r($arr); // [1, 2, 4]

相关问题