我从数据库中提取记录并将其存储在仅包含文本的HTML页面上。每条记录都存储在<p>
段落字段中,并以换行符<br />
和行&lt; hr>
分隔。
例如:
Company Name<br/>
555-555-555<br />
Address Line 1<br />
Address Line 2<br />
Website: www.example.com<br />
我只需要将这些记录放入CSV文件中。我将 fputcsv 与array()和file_get_contents()结合使用,但它将网页的整个源代码读入.csv文件,并且还缺少大量数据。这些是以相同格式存储的多个记录。因此,在如上所示的整个记录块之后,它被<hr>
行标记分开。我想将公司名称读入名称列,将电话号码读入电话列,将地址列入地址列,将网站列入网站列,如下所示。
http://i.stack.imgur.com/00Gxw.png
我该怎么做?
HTML代码段:
1 Stop Signs<br />
480-961-7446<br />
500 N. 56th Street<br />
Chandler, AZ 85226<br />
<br />
Website: www.1stopsigns.com<br />
<br />
</p><br /><hr><br />
它在HTML的源代码中间隔如此。
答案 0 :(得分:3)
假设您的数据遵循一种模式,其中每个记录由<hr>
标记分隔,并且其中的每个字段由<br />
分隔,那么您应该能够拆分数据。
有很多方法可以做到这一点,但使用explode()
可能有用的天真方式可能是这样的:
// open a file pointer to csv
$fp = fopen('records.csv', 'w');
// first, split each record into a separate array element
$records = explode('<hr>', $str);
// then iterate over this array
foreach ($records as $record) {
// strip tags and trim enclosing whitespace
$stripped = trim(strip_tags($record));
// explode by end-of-line
$fields = explode(PHP_EOL, $stripped);
// array walk over each field and trim whitespace
array_walk($fields, function(&$field) {
$field = trim($field);
});
// create row
$row = array(
$fields[0], // name
$fields[1], // phone
sprintf('%s, %s', $fields[2], $fields[3]), // address
$fields[6], // web
);
// write cleaned array of fields to csv
fputcsv($fp, $row);
}
// done
fclose($fp);
其中$str
是您要解析的页面数据。希望这会有所帮助。
修改强>
最初没有注意到具体的现场要求。更新了示例。
答案 1 :(得分:2)
到目前为止,最简单的方法是简单地使用块,从<hr>
标记向前删除所有内容,然后将字符串拆分为<br />
标记上的字符串数组。
答案 2 :(得分:2)
假设上面显示的html格式正确,我对这个问题的解决方法必须分两个阶段。 第一。清除一点html文本,以便更有效地导出或管理信息。这里尝试清除您要保存的项目,并删除您不知道在不久的将来需要的项目。
$html = preg_replace("|\s{2,}|si"," ",$html); // clear non neccesary spaces
$html = preg_replace("|\n{2,}|si","\n",$html); // convert more return line to only one
$html = preg_replace("|<br />|si","##",$html); // replace those tags with this one
然后你会有一个更干净的html来处理类似的....
1 Stop Signs##
480-961-7446##
500 N. 56th Street##
Chandler, AZ 85226##
Website: www.1stopsigns.com##
##
</p>##<hr>##
二。现在,您可以爆炸字段或将内部变为逗号分隔值以形成csv
// here you'll have the fields to work with into the array called $csv_parts
$csv_parts = explode("##",$html);
// imploding, so there you have the formatted csv similar to 1 Stop Signs,480-961-7446,..
$csv = implode(",",$csv_parts);
现在,您将有两种方法可以使用html来提取字段或导出csv。
希望这有助于或帮助您了解所需的内容。