数组随条件爆炸


Array explode with condition

我正面临一个我自己无法解决的问题,我找不到解决它的方法。

我有两个字符串

'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"
)