解析由~HEADER @分隔的单个CSV列

时间:2011-10-21 16:19:57

标签: php parsing csv delimited

我有一个CSV文件需要一些额外的处理。我已经完成了大部分自定义功能。我现在停留的是Feed的最新成员,1列中有多个类别。以下是新字段设置的快速示例。

Category01@Things~Category01@Will~Category01@Be~Category01@Here~Category02@Testing~Category02@More text here~Category02@Any data~Category02@No more data for this category~LastCategory@This~LastCategory@Is~LastCategory@The~LastCategory@End

我需要从每个可用类别中使用PHP构建一个数组,类似于;

$category01 = array('Things', 'Will', 'Be', 'Here');

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

如果我理解您的问题和格式正确,类别由~分隔,并且每个类别都列为"SomeString@Category Name",那么这应该是诀窍。但是,我不认为这与CSV格式有任何关系。

$pairs = explode('~', $string);
$cats = array();
foreach ($pairs as $pair) {
    list($cat_number, $cat_name) = explode('@', $pair);
    $cats[] = $cat_name;
}

答案 1 :(得分:0)

Gahhh。护目镜,他们什么都不做!

如果您无法更改该输出表单(并且应该将其更改为更好的内容),那么您将不得不蛮力:

$csv = '...';
$categories = array();
$parts = explode('~', $csv);
foreach($parts as $part) {
    $bits = explode('@', $part);
    $category = (int)substr($part[0], 8);
    if (!is_array($categories[$category])) {
        $categories[$category] = array();
    }
    $categories[$category][] = $part[1];
}

当然,这会让你在{csv'尾端的LastCategory内容爆炸。所以...让我再次强烈要求你解决所有产生所谓的“csv”的问题。