解析CSV与PHP

问题描述:

可能重复:
how to extract data from csv file in php解析CSV与PHP

我是在PHP全新的,现在我尽量让私人网站,我读出了一些雅虎股票信息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; 

我希望有人能帮助我,和SRY我的英语不好。

问候, 马蒂亚斯

+0

谢谢@戈登 – Sebastian 2012-02-25 21:42:16

你可以使用正则表达式从各行提取所需的信息。下面的php代码是你需要提取这个特定的数据。这是一个正则表达式的代码,你应该用的preg_match函数使用它:

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

它给你一个数组,你会用它作为:

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

UPDATE:
这是代码做到这一点:

<?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你会发现它$匹配[3]中,如果在第4

+0

但我怎样才能连接我的csv? – Sebastian 2012-02-25 21:18:23

+0

@matthias读取csv文件的每一行(使用for或while)并使用preg_match_all(对于每行)。 – Andrew 2012-02-25 21:26:21

+0

thx我会试试看:-) – Sebastian 2012-02-25 21:33:13

您是否尝试过寻找str_getcsvfgetscsv

+0

请使用评论功能的单行。 – mario 2012-02-25 22:09:08

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

如果你不是在PHP5.3,你应该能够使用fgetcsv与传递给它的流。

首先的值),应该看到手动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使用此function..and保存的文件是不强硬。并且代码的来源仍然是上面所述的link,您只需根据您的要求对其进行修改。

HTH