我遇到了一个我自己无法解决的问题,我找不到办法去做。
我有这两个字符串:
'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"');
哪个会发出
|
我怎样才能得到这个结果?
答案 0 :(得分:4)
请参阅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开始提供,也可以根据输入的内容进行配置。我添加了一些特殊情况,这是一个看起来比它简单得多的经典问题。
答案 1 :(得分:0)
您可以使用php函数str_getcsv。
这是一个例子:
Development
输出:
$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.'"';
}
}