2010-10-05 98 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文件)。