出口preg_match_all到CSV文件匹配
问题描述:
我试图从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);
答
尝试:
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
答
如果不知道您的字符串的结构或正则表达式,这仅仅是一个猜测但看起来你可能想要使用PREG_SET_ORDER
来根据匹配来制作$matches
阵列组,而不是根据模式中的捕获组对组合结果数组的默认PREG_PATTERN_ORDER
(documentation有示例)。
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文件)。
'$ data'似乎不是一个数组。它应该是一个吗? – 2010-10-05 17:15:46
是的,它应该是一个数组,这就是我遇到的问题,我需要循环访问数组中的每个元素并将其添加到csv文件中,我太自责了。 – 2010-10-05 17:36:29