【发布时间】:2014-06-19 20:46:55
【问题描述】:
我有一个用数组填充的数组。主数组中的每个数组都包含从房地产网站抓取的数据。当我将它们输出到 CSV 文件时,我想让每个数据类别(价格、地址、大小等)都有自己的单独列。现在,每个类别都存储在一行中。我在这里查看了一些关于此的线程,但无法使代码正常工作。我认为这是因为这个数组不包含字符串,它包含每个都包含字符串的数组。我想知道如何做到这一点。我尝试做 array_flip() 但是它返回一个错误,说数组必须包含字符串或数字。
这是我现在拥有的:
<?php
//URL HERE
$html = file_get_contents("URL_HERE");
$DOM = new DOMDocument();
libxml_use_internal_errors(true);
$DOM->loadHTML($html);
// price
$pfinder = new DomXPath($DOM);
$classname_p = 'price-large';
$pnodes = $pfinder->query("//*[contains(@class, '$classname_p')]");
$csv_values_p = array();
foreach ($pnodes as $pnode) {
$csv_values_p[] = $pnode->nodeValue;
}
// zestimate
$zfinder = new DomXPath($DOM);
$classname_z = 'zestimate';
$znodes = $zfinder->query("//*[contains(@class, '$classname_z')]");
$csv_values_z = array();
foreach ($znodes as $znode) {
$csv_values_z[] = $znode->nodeValue;
}
// address
$afinder = new DomXPath($DOM);
$classname_a = 'property-address';
$anodes = $afinder->query("//*[contains(@class, '$classname_a')]");
$csv_values_a = array();
foreach ($anodes as $anode) {
$csv_values_a[] = $anode->nodeValue;
}
// property details
$dfinder = new DomXPath($DOM);
$classname_d = 'property-data';
$dnodes = $dfinder->query("//*[contains(@class, '$classname_d')]");
$csv_values_d = array();
foreach ($dnodes as $dnode) {
$csv_values_d[] = $dnode->nodeValue;
}
// lot size
$lfinder = new DomXPath($DOM);
$classname_l = 'property-lot';
$lnodes = $lfinder->query("//*[contains(@class, '$classname_l')]");
$csv_values_l = array();
foreach ($lnodes as $lnode) {
$csv_values_l[] = $lnode->nodeValue;
}
// year built
$yfinder = new DomXPath($DOM);
$classname_y = 'property-year';
$ynodes = $yfinder->query("//*[contains(@class, '$classname_y')]");
$csv_values_y = array();
foreach ($ynodes as $ynode) {
$csv_values_y[] = $ynode->nodeValue;
}
// Master Array:
$outputarray = array($csv_values_p,$csv_values_z,$csv_values_a,$csv_values_d,$csv_values_l,$csv_values_y);
var_dump($outputarray);
// Export to .CSV:
$fp = fopen('propertydata3.csv', "w") or die($php_errormsg);
foreach ($outputarray as $output) {
fputcsv($fp, $output);
}
fclose($fp);
?>
【问题讨论】:
-
如果没有一个函数可以做到这一点,那么写一些
foreach循环
标签: php arrays export-to-csv