【问题标题】:Var_export problems in phpphp中的var_export问题
【发布时间】:2014-05-21 23:38:05
【问题描述】:

我正在编写一个程序来自动从 url 下载数据。数据在 csv 中,我正在尝试将其转换为可用信息。下载部分工作正常,但是,我使用 var_export 将数据转换为数组,然后从数组中收集数据。问题是没有从数组中获取数据,我不知道为什么。提前致谢。

<?php ///without data harvesting
$loop = 1;
while ($loop < 401)
    {
    ///data file harvesting csv
    $symbol = array("A","AA","AAN","AAP","AAT","AAV","AB","ABB","ABBV","ABC","ABEV","ABG","ABM","ABR","ABR-A","ABR-B","ABT","ABW-B","ABX","ACC","ACCO","ACE","ACG","ACH","ACI","ACM","ACMP","ACN","ACO","ACP","ACRE","ACT","ACW","ADC","ADM","ADS","ADT","ADX","AEB","AEC","AED","AEE","AEF","AEG","AEH","AEK","AEL","AEM","AEO","AEP","AER","AES","AES-C","AET","AEV","AF","AF-C","AFA","AFB","AFC","AFG","AFL","AFM","AFQ","AFSD","AFT","AFW","AG","AGC","AGCO","AGD","AGI","AGM","AGM-A","AGM.A","AGN","AGO","AGO-B","AGO-E","AGO-F","AGRO","AGU","AGX","AH","AHC","AHH","AHL","AHL-A","AHL-B","AHL-C","AHP","AHS","AHT","AHT-A","AHT-D","AHT-E","AI","AIB","AIF","AIG","AIG.W","AIN","AIR","AIT","AIV","AIV-Z","AIW","AIY","AIZ","AJG","AKO.A","AKO.B","AKP","AKR","AKS","AL","ALB","ALDW","ALE","ALEX","ALG","ALJ","ALK","ALL","ALL-A","ALL-B","ALL-C","ALLE","ALP-N","ALP-O","ALP-P","ALR","ALR-B","ALSN","ALU","ALV","ALX","AMC","AMD","AME","AMG","AMH","AMH-A","AMID","AMP","AMP-A","AMRC","AMRE","AMT","AMT-A","AMTD","AMTG","AMX","AN","ANF","ANFI","ANH","ANH-A","ANH-B","ANN","ANR","ANW","AOD","AOI","AOL","AON","AOS","AP","APA","APAM","APB","APC","APD","APF","APH","APL","APO","APU","AR","ARC","ARCO","ARCX","ARDC","ARE","ARE-E","ARG","ARH-C","ARI","ARI-A","ARK","ARL","ARMF","ARMK","ARN","ARO","ARP","ARPI","ARR","ARR-A","ARR-B");
        $symboluse = $symbol[$loop];
        $historical_data_1 = file_get_contents('http://ichart.finance.yahoo.com/table.csv?s='.$symboluse.'&a=05&b=06&c=2013&d=06&e=05&f=2014&g=d&ignore=.csv');
        $dividend_data_1 = file_get_contents('http://ichart.finance.yahoo.com/table.csv?s='.$symboluse.'&a=05&b=06&c=2013&d=06&e=05&f=2014&g=v&ignore=.csv');
        $general_data_1 = file_get_contents('http://finance.yahoo.com/d/quotes.csv?s='.$symboluse.'&f=e7e8rr5');
    ///converting csv to usable data
    ///historical
    $h_array = 
    $historical_array = array (1447, explode(',', $historical_data_1), true );
    $dividend_array = array ( explode(',', $dividend_data_1, true) );
    $general_array = array ( explode(',', $general_data_1, true) );
    var_dump($historical_array);
    var_dump($dividend_array);
    var_dump($general_array);
///making it usable data
    $symbol_1 = $symboluse;
    $price = intval($historical_array[11]); /// have to call the array inside an array because the data doesn't collect
    $dividend1 = intval($dividend_array[2]);
    $dividend2 = intval($dividend_array[3]);
    $dividend3 = intval($dividend_array[4]);
    $dividend4 = intval($dividend_array[5]);
    $PE_Ratio = intval($general_array[2]);
    $EPS = intval($general_array[0]);
    $EPS_next_year = intval($general_array[1]);
    $PEG_Ratio = intval($general_array[3]);
    echo $symbol_1."\n";
    echo $price."\n";
    echo $dividend1."\n";
    echo $dividend2."\n";
    echo $dividend3."\n";
    echo $dividend4."\n";
    echo $PE_Ratio."\n";
    echo $EPS."\n";
    echo $EPS_next_year."\n";
    echo $PEG_Ratio."\n";
    $loop++;
    }
?>

【问题讨论】:

  • var_export 的部分在哪里?如果你在这里也放了一些 var_dump,那么我们可以将它们与你的代码进行比较。
  • fgetcsv()str_getcsv() 很可能会更容易。也许发布一个文件数据的例子和你想要的输出。

标签: php stocks


【解决方案1】:

这里有很多错误。使用 explode() 拆分 CSV 文件仅在某些情况下有效。在这里,您有需要首先分隔的多行文件。使用str_getcsv()会更可靠。

此外,您从结果数组的错误元素中获取数据

最后,您使用intval() 将浮点数据转换为整数,因此您将得到零结果。

试试这个版本,减少测试。您可以自己重建其余部分。

$symbol = array("A","AA");
foreach ($symbol as $symboluse) {
    $dividend_data_1 = file_get_contents('http://ichart.finance.yahoo.com/table.csv?s='.$symboluse.'&a=05&b=06&c=2013&d=06&e=05&f=2014&g=v&ignore=.csv');

    ///converting csv to usable data
    ///historical
    $Data = str_getcsv($dividend_data_1,"\n");   // separate lines
    $dividend_array = [];
    foreach($Data as $row) {
        $dividend_array[] = str_getcsv($row);    // parse individual lines.
    }
    // var_dump($dividend_array);

///making it usable data
    $dividend1 = $dividend_array[1][1];
    $dividend2 = $dividend_array[2][1];
    $dividend3 = $dividend_array[3][1];
    $dividend4 = $dividend_array[4][1];
    echo $symboluse.' ';
    echo $dividend1.", ";
    echo $dividend2.", ";
    echo $dividend3.", ";
    echo $dividend4;
    echo '<br>';

}

【讨论】:

  • 找出数据在数组中的位置的方法
  • @user3385861 你说得对,但只是偏离了一个元素。我查看了 CSV 文件并数了数。
猜你喜欢
  • 1970-01-01
  • 2013-10-23
  • 2012-04-02
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
相关资源
最近更新 更多