2010-10-05 56 views
0

我试图从preg_match_all比赛导出为CSV文件,但我得到了以下错误:出口preg_match_all到CSV文件匹配

Warning: fputcsv() expects parameter 2 to be array, string given 

这是我在遇到问题的部分代码,如何我可以修改它,以便我能够将匹配导出到csv文件?

preg_match_all($pattern, $pos, $matches); 

$fp = fopen('data.csv', 'w'); 
foreach($matches[0] as $data){ 
fputcsv($fp,$data); 
} 
fclose($fp); 
+0

'$ data'似乎不是一个数组。它应该是一个吗? – 2010-10-05 17:15:46

+0

是的,它应该是一个数组,这就是我遇到的问题,我需要循环访问数组中的每个元素并将其添加到csv文件中,我太自责了。 – 2010-10-05 17:36:29

回答

0

尝试:

preg_match_all($pattern, $pos, $matches); 

$fp = fopen('data.csv', 'w'); 
fputcsv($fp,$matches[0]); 
fclose($fp); 

的第二个参数需要是一个数组。而不是通过匹配(一个阵列)循环和添加它们一次一个,只是传递整个比赛阵列($matches[0]

+0

这是我已经尝试的一种解决方案,但它也不起作用。我得到的只是一个空的csv文件。 – 2010-10-05 17:43:09

0

如果不知道您的字符串的结构或正则表达式,这仅仅是一个猜测但看起来你可能想要使用PREG_SET_ORDER来根据匹配来制作$matches阵列组,而不是根据模式中的捕获组对组合结果数组的默认PREG_PATTERN_ORDERdocumentation有示例)。

preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER); 

foreach ($matches as $match) { 
    // Get rid of $match[0] (the overall match) 
    unset($match[0]); 
    // Write the captured groups to the CSV file 
    fputcsv($fp, $match); 
} 

如果不是你以后,更多的信息来自你自己需要像你想要的$matches阵列的结构,和/或输入($subject)和预期产出(的一个例子CSV文件)。