我正面临一个我自己无法解决的问题,我找不到解决它的方法。
我有两个字符串
'Germany, "Sightseeing, Travelling, Hotels"'
和
'Health, Medicin, Healthcare'
我需要在,
字符上explode()
这个字符串,但只有当文本,这个,
所在的地方没有被"
包围。
array(0 => 'Germany', 1 => '"Sightseeing, Travelling, Hotels"');
array(0 => 'Health', 1 => 'Medicin', 2 => 'Healthcare');
到目前为止,这是我所拥有的:
explode(",", 'Germany, "Sightseeing, Travelling, Hotels"');
会给出
array(0 => 'Germany', 1 => '"Sightseeing', 2 => 'Travelling', 3 => 'Hotels"');
我怎样才能得到这个结果?
参见str_getcsv()如何解析csv(即使您没有读取csv文件,这正是这个字符串的样子):
<?php
print_r(str_getcsv('Germany, "Sightseeing, Travelling, Hotels"', ','));
print_r(str_getcsv('Health, Medicin, Healthcare'));
print_r(str_getcsv('D"uh!, '"Test'"', ','));
?>
结果:
Array ( [0] => Germany [1] => Sightseeing, Travelling, Hotels )
Array ( [0] => Health [1] => Medicin [2] => Healthcare )
Array ( [0] => D"uh! [1] => "Test" )
备注:此函数从php 5.3.0版本开始可用,也可以根据您的输入进行配置。我添加了一些特殊情况,这是一个经典的问题,看起来比它简单得多。
可以使用php函数str_getcsv
下面是一个例子:
$string_1 = 'Germany, "Sightseeing, Travelling, Hotels"';
$string_2 = 'Health, Medicin, Healthcare';
$result_1 = str_getcsv($string_1,',','"');
$result_2 = str_getcsv($string_2,',','"');
print_R($result_1);
print_R($result_2);
输出:
Array
(
[0] => Germany
[1] => Sightseeing, Travelling, Hotels
)
Array
(
[0] => Health
[1] => Medicin
[2] => Healthcare
)
你可以在映射结果数组的每个元素之后,如果有逗号,你可以用"
foreach($result_1 as $i => $item) {
if(substr_count($item,',') > 0) {
$result_1[$i] = '"'.$item.'"';
}
}
湿草地生产:
Array
(
[0] => Germany
[1] => "Sightseeing, Travelling, Hotels"
)