2012-06-03 58 views
0

我有一個數組「$ results」,其中包含使用正則表達式從網頁中抓取的結果集。 我有點困惑遍歷數組寫入.csv文件的數組的整個數據。如何遍歷多維數組以將其寫入分隔文件中。 (PHP)

這裏是以下列方式打印之後的陣列輸出。

print_r ($results); //printing the array 

輸出

Array 
    (
     [fullName] => Ogdensburg Walmart Store #2092 
     [street1] => 3000 Ford Street Ext 
     [city] => Ogdensburg 
     [state] => NY 
     [zipcode] => 13669 
     [phone] => (315) 394-8990 
     [latitude] => 44.7083 
     [longitude] => -75.4564 
    ) 
    Array 
    (
     [fullName] => Evans Mills Walmart Supercenter Store #5497 
     [street1] => 25737 Us Route #11 
     [city] => Evans Mills 
     [state] => NY 
     [zipcode] => 13637 
     [phone] => (315) 629-2124 
     [latitude] => 44.0369 
     [longitude] => -75.8455 
    ) 
    Array 
    (
     [fullName] => Watertown Walmart Supercenter Store #1871 
     [street1] => 20823 State Route 3 
     [city] => Watertown 
     [state] => NY 
     [zipcode] => 13601 
     [phone] => (315) 786-0145 
     [latitude] => 43.9773 
     [longitude] => -75.9579 
    ) 

我只用簡單的陣列工作,有誰能夠給我提示如何遍歷$results陣列把它寫在.csv文件或.xls文件。

回答

1

您可以使用此:

$fp = fopen("file.csv","w"); 
foreach((array)$results as $val) { 
    fwrite($fp,implode(";",$val)."\r\n"); 
} 
fclose($fp); 

幾件事說:

  • 需要的"\r\n"適當地改變行

  • 而最常見分離器逗號(,),我發現一些 應用程序像微軟excel 2010不喜歡它,而不是put the whole line in a cell;而不是semicolon在這種情況下工作。

  • 我總是有fputcsv問題,所以而不是與我一起去。

編輯:

$fp = fopen("file.csv","w"); 
    $contents = file_get_contents('http://www.walmart.com/storeLocator/ca_storefinder_results.do?serviceName=&rx_title=com.wm.www.apps.storelocator.page.serviceLink.title.default&rx_dest=%2Findex.gsp&sfsearch_single_line_address=K6T'); 
    preg_match_all('/stores\[(\d+)\] \= \{/s', $contents, $matches);   
    foreach ($matches[1] as $index) {  
     preg_match('/stores\[' . $index . '\] \= \{(.*?)\}\;/s', $contents, $matches); 
     preg_match_all('/\'([a-zA-Z0-9]+)\' \: ([^\,]*?)\,/s', $matches [1], $matches); 
     $c = count ($matches [1]); 
     $results = array(); 
     for ($i=0; $i<$c; $i++) { 
      $results [$matches [1] [$i]] = trim($matches [2] [$i], "\'"); 
     } 
     fwrite($fp,implode(";",array_values($results))."\r\n"); 
    } 
    fclose($fp); 

EDITED 2:

在您需要避免您 結果數組中添加他們的.csv文件寫only specific columns() 取消之後,像這樣:

... 
for ($i=0; $i<$c; $i++) { 
    $results [$matches [1] [$i]] = trim($matches [2] [$i], "\'"); 
} 
unset($results["weekEndSaturday"]); 
unset($results["recentlyOpen"]); 
.. go on, renove the non-desired values .. 
fwrite($fp,implode(";",array_values($results))."\r\n"); 
+0

它給人的警告: 「破滅():無效的參數傳遞」。並且沒有寫入file.csv的數據,請告訴我該更改哪些內容才能正常工作。 –

+1

我懷疑你的數組與我從文章中抓取並進行測試的數組有些不同。請回顯「

";print_r($result);echo"
」;在你的文章(編輯)和示例源代碼以獲得更好的.. tx – 2012-06-03 15:25:37

+0

我已經添加了我的代碼。請在問題中檢查它。 –

2
$fp = fopen($filename, 'w'); 
foreach ($results as $row) { 
    fputcsv($fp, $row); 
}