14
Sep '12

With some cheeky regular expressions, converting an HTML table to CSV is actually very simple and efficient. Starting with the raw table markup in the variable $table_string you just need to do the following to store it as a CSV file:

$handle = fopen('output.csv', 'w');

if(preg_match_all('/<tr.*?>(.*?)<\/[\s]*tr>/s', $table_string, $row_matches)) {
	foreach($row_matches[1] as $product) {
		if(preg_match_all('/<t[dh].*?>(.*?)<\/[\s]*t[dh]>/s', $product, $data_matches)) {
			$product_data = array();

			foreach($data_matches[1] as $data) {
				$product_data[] = strip_tags($data);
			}

    			fputcsv($handle, $product_data);
		}
	}
}

fclose($handle);