数组随条件爆炸

时间:2015-09-01 07:57:00

标签: php arrays string

我遇到了一个我自己无法解决的问题,我找不到办法去做。

我有这两个字符串:

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

哪个会发出

|

我怎样才能得到这个结果?

2 个答案:

答案 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.'"';
    }
}