使用PHP解析CSV

时间:2012-02-25 21:04:14

标签: php parsing csv echo

  

可能重复:
  how to extract data from csv file in php

我是php的新手,现在我尝试为我创建一个私人网站,并通过yahoo api读出一些股票信息

链接:finance.yahoo.com/d/quotes.csv?s=^GDAXI+^TECDAX+eurusd=x+gcf12.cmx+CLH12.NYM&f=nl1k2

链接工作正常,但现在我怎么能读出这个文件?并回复我页面上的信息?

输出:

"DAX",6864.43,"+54.97 - +0.81%"
"TECDAX",775.33,"+3.78 - +0.49%"
"EUR to USD",1.3447,"N/A - 0.00%"
"Gold Jan 12",1731.80,"N/A - +0.32%"
"Crude Oil Mar 12",105.88,"N/A - +0.04%"

我需要什么:

echo $name;
echo $rate;
echo $change;
echo $changeinpercent;

我希望有人可以帮助我,并为我糟糕的英语而烦恼。

问候, 的Matthias

4 个答案:

答案 0 :(得分:3)

您是否尝试过查看str_getcsvfgetscsv

答案 1 :(得分:3)

如果您使用的是PHP5.3,则可以使用str_getcsv,但仍需要解析最后一个字符串值,因为它包含您要查找的两个值(提示:explode)。

如果你没有使用PHP5.3,你应该可以使用传递给它的流fgetcsv

答案 2 :(得分:2)

您可以使用RegEx从每行中提取所需的信息。以下php代码是您提取此特定数据所需的内容。这是一个RegEx代码,你应该使用preg_match函数:

/\"([^\"]+)\",(\d+\.\d+),\"(N\/A)?([+-]?\d+\.?\d+)?\s+-\s+([+-]?\d+\.?\d+%?)/  

它为您提供了一个数组,您将其用作:

$match[0]  
$match[1]  
$match[2]  
$match[3]  

更新:
这是代码:

<?php
$csv=file_get_contents("http://finance.yahoo.com/d/quotes.csv?s=^GDAXI+^TECDAX+eurusd=x+gcf12.cmx+CLH12.NYM&f=nl1k2");

$rows=explode("\n", $csv);

for($i=0;$i<count($rows);$i++)
{
    preg_match_all("/\"([^\"]+)\",(\d+\.\d+),\"(N\/A)?([+-]?\d+\.?\d+)?\s+-\s+([+-]?\d+\.?\d+%?)/", $rows[$i],$matches,PREG_SET_ORDER);
}
?>  

它返回:

Array
(
   [0] => Array
        (
            [0] => "DAX",6864.43,"+54.97 - +0.81%
            [1] => DAX
            [2] => 6864.43
            [3] => 
            [4] => +54.97
            [5] => +0.81%
        )  
Array
(
    [0] => Array
        (
            [0] => "Gold Jan 12",1731.80,"N/A - +0.32%
            [1] => Gold Jan 12
            [2] => 1731.80
            [3] => N/A
            [4] => 
            [5] => +0.32%
        )

)

如果是N / A,你会在$ matches [3]中找到它,如果是4的值。     )

答案 3 :(得分:1)

首先,您应该看到手册here 然后,请参阅以下代码粘贴的代码,

<?php 
// 
 // Convert csv file to associative array: 
 // 

function csv_to_array($input, $delimiter='|') 
 { 
     $header = null; 
     $data = array(); 
     $csvData = str_getcsv($input, "\n"); 

     foreach($csvData as $csvLine){ 
         if(is_null($header)) $header = explode($delimiter, $csvLine); 
         else{ 

             $items = explode($delimiter, $csvLine); 

             for($n = 0, $m = count($header); $n < $m; $n++){ 
                 $prepareData[$header[$n]] = $items[$n]; 
             } 

             $data[] = $prepareData; 
         } 
     } 

     return $data; 
 } 

//----------------------------------- 
 // 
 //Usage: 

$csvArr = csv_to_array(file_get_contents('test.csv')); 

?>

此代码应该对您有所帮助,但请将文件保存为CSV以使用此功能..并保存文件并不困难。并且代码的来源仍然是上面陈述的link,您只需根据您的要求对其进行修改。

HTH