解析PHP数组链接的CSV文件,将这些链接提供给simplehtmldom

时间:2011-01-21 23:28:32

标签: php arrays parsing csv

我有一个PHP代码,它将csv文件读取并解析为多行数组,我接下来需要做的是采用这个数组,让simplehtmldom触发一个爬虫返回一些公司股票信息。

CSV解析器的php代码是

$arrCSV = array();  
// Opening up the CSV file  
if (($handle = fopen("NASDAQ.csv", "r")) !==FALSE) {  
// Set the parent array key to 0  
$key = 0;  
// While there is data available loop through unlimited times (0) using separator (,)
while (($data = fgetcsv($handle, 0, ",")) !==FALSE) {  
   // Count the total keys in each row $data is the variable for each line of the array
$c = count($data);  
   //Populate the array  
   for ($x=0;$x<$c;$x++) {  
   $arrCSV[$key][$x] = $data[$x];  
   }  
   $key++;  
} // end while  
// Close the CSV file  
fclose($handle);  
} // end if  
echo "<pre>";  
echo print_r($arrCSV);  
echo "</pre>";

这很好用并逐行解析数组,$ data是每行的变量。我现在需要做的是通过simplehtmldom读取它,这是它崩溃的地方,我正在使用这个代码或类似的东西,我很缺乏经验,但我想我需要一个foreach声明在某处这条线。

这是simplehtmldom代码

$html = file_get_html($data);  
$html->find('div[class="detailsDataContainerLt"]');  
$tickerdetails = ("$es[0]");  
$FileHandle2 = fopen($data, 'w') or die("can't open file");  
fwrite($FileHandle2, $tickerdetails);  
fclose($FileHandle2);  
fclose($handle);  

所以我的问题是如何让他们两个一起工作,我多次检查simplehtmldom手册页并在这个区域发现它有点模糊,上面的simplehtmldom代码是我在另一个函数中使用但是通过direclty链接所以我知道它有效。

问候 马丁

1 个答案:

答案 0 :(得分:0)

您的循环可以缩减为(是的,它是相同的):

while ($data = fgetcsv($handle, 0, ',')) {
    $arrCSV[] = $data;
}

使用SimpleXML代替SimpleDom(因为它是标准的PHP):

foreach ($arrCSV as $row) {
    $xml = simplexml_load_file($row[0]); // Change 0 to the index of the url
    $result = $xml->xpath('//div[contains(concat(" ", @class, " "), " detailsDataContainerLt")]');
    if ($result->length > 0) {
        $file = fopen($row[1], '2'); // Change 1 to the filename you want to write to
        if ($file) {
            fwrite($file, (string) $result->item(0));
            fclose($file);
        }
    }
}

如果我理解正确,应该这样做......