2012-02-09 140 views
2

我想在學校做一個類的「股票」網站,這是我第一次跳入PHP。基本上,該腳本從Google文檔電子表格中提取一個CSV文件,然後(嘗試)將這些值放入數組中供以後使用。我想展示前五名股票上漲和下跌,但我有問題。這裏是腳本的主要部分:在嵌套的鍵值查找在php

<html> 
<head> 
    <?php 
    #Global Variables 
    $rising = array(); 
    $falling = array(); 
    $stocks = array(); 
    #End Global Variables 

    #Function to read data from the spreadsheet 
    function get_data($url){ 
     $ch = curl_init(); 
     $timeout = 5; 
     curl_setopt($ch,CURLOPT_URL,$url); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
     curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     return $data; 
    } 

    #Process data 
    function populateTicker(){ 
     $document = "https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0AtrtT_MC9_YFdHRDUGx0a2xveXNfOHJVdXJ6bVNkMFE&output=csv"; 
     $data= get_data($document); 
     $lines = explode("\n", $data); 
     $val = ""; 
     foreach($lines as $key => $value){ 
      if($key != 0){ 
       $stockInfo = explode(",", $value); 
       $perChange = $stockInfo[3]; 
       $perChangeVal = "up "; 
       if($perChange < 0){ 
        $perChangeVal = "down "; 
        $falling['$stockInfo[0]'] = $perChange; 
       }else{ 
        $rising['$stockInfo[0]'] = $perChange; 
       } 
       $stocks['$stockInfo[0]'] = array("symb" => $stockInfo[0], "name" => $stockInfo[1], "price" => $stockInfo[2]); 
       $val = $val . "(" . $stockInfo [0] . ") " . $stockInfo [1] . " " . "\$" . $stockInfo [2] . " " . $perChangeVal . $perChange . "% today" . "\v \v \v \v | \v \v \v \v"; 
      } 
     } 
     //asort($falling); 
     //arsort($rising); 
     return $val; 
    } 

    function getRising($index){ 
     if($index <= count($rising)){ 
      $keys = array_keys($rising); 
      $data = $stocks[$keys[$index]]; 
      return "(" . $data['symb'] . ") " . $data['name'] . " " . "\$" . $data['price']; 
     }else{ 
      return "."; 
     } 

    } 

    function getFalling($index){ 
     if($index <= count($falling)){ 
      $keys = array_keys($falling); 
      $data = $stocks[$keys[$index]]; 
      return "(" . $data['symb'] . ") " . $data['name'] . " " . "\$" . $data['price']; 
     }else{ 
      return "."; 
     } 
    } 
    ?> 
</head> 
<body> 
    <DIV id='DEBUG'> 
     <?php 
      print_r($stocks); 
      print_r($rising); 
      print_r($falling); 
     ?> 
    </DIV> 
    <center><b><u><font size="+2">Latest Prices</font><br /></u></b></center> 
    <DIV ID="TICKER" STYLE="border-top:2px solid #CCCCCC; border-bottom:2px solid #CCCCCC; overflow:hidden; width:100%" onmouseover="TICKER_PAUSED=true" onmouseout="TICKER_PAUSED=false"> 
    <?php echo populateTicker(); ?> 
    </DIV> 
    <script type="text/javascript" src="webticker_lib.js" language="javascript"></script> 
    <div id='Top5'> 
    <br /> 
    <center><b>This page does not update automatically! Please refresh the page to update the information!</b></center> 
    <br /> 
    <center><b><u><font size="+2">Top 5's</font><br /></u></b></center> 
    <center> 
     <table border="1" cellpadding="5"> 
      <tr> 
      <th>Top 5 Rising</th> 
      <th>Top 5 Falling</th> 
      </tr> 
      <tr> 
      <td><?php echo getRising(1); ?></td> 
      <td><?php echo getFalling(1); ?></td> 
      </tr> 
      <tr> 
      <td><?php echo getRising(2); ?></td> 
      <td><?php echo getFalling(2); ?></td> 
      </tr>  <tr> 
      <td><?php echo getRising(3); ?></td> 
      <td><?php echo getFalling(3); ?></td> 
      </tr>  <tr> 
      <td><?php echo getRising(4); ?></td> 
      <td><?php echo getFalling(4); ?></td> 
      </tr>  <tr> 
      <td><?php echo getRising(5); ?></td> 
      <td><?php echo getFalling(5); ?></td> 
      </tr> 
     </table> 
    </center> 
    </div> 
    <br /> 
    <center><b><u><font size="+2">All Stocks</font><br /></u></b></center> 
    <div id='All'> 
    <center> 
     <table border="1" cellpadding="5"> 
      <tr> 
      <th>Symbol</th> 
      <th>Name</th> 
      <th>Price</th> 
      <th>High</th> 
      <th>Low</th> 
      <th>Percent Change</th> 
      </tr> 
      <?php 
      #Dynamic Table Creation 
      foreach($stocks as $key => $value){ 
       echo '<tr>'; 
        echo '<td>(' . $value['symb'] . ')</td>'; 
        echo '<td>' . $value['name'] . '</td>'; 
        echo '<td>' . $value['price'] . '</td>'; 
        echo '<td></td>'; 
        echo '<td></td>'; 
        echo '<td>' . $vaule['perChange'] . '</td>'; 
       echo '</tr>'; 
      } 
      ?> 
     </table> 
    </center> 
    </div> 
</body> 
<footer> 
</footer> 
</html> 

但是沒有東西被分配給數組。任何幫助,將不勝感激。

更新:我添加了首頁的完整源碼,index.php UPDATE2:我想通了。我來自java,並沒有完全理解變量的作用域如何在php中工作。一個簡單的

<?php 
global $rising, $falling, $stocks; 
... 
?> 

的伎倆

+0

你似乎沒有在任何地方調用你的函數。順便說一句,如果這是「家庭作業」,你應該這樣標記,讓人們知道。 – liquorvicar 2012-02-09 18:11:33

+0

這不是家庭作業,功能在其他地方被調用,抱歉的混亂!我知道它正在執行,因爲populateTicker()函數返回期望的數據。我遇到的一個問題是數組賦值$ rising和$ falling似乎沒有做任何事情,因爲數組保持空白... – nlowe 2012-02-09 21:31:38

+0

歡迎來到SO btw。很高興你知道,我只是想表明這一點!我建議你花一些時間讓步驟調試工作,再加上你可能想看看單元測試。我假設你有來自Java的這些東西的經驗。你的代碼中還有一個bug:$ rising ['$ stockInfo [0]']應該只是$ rising [$ stockInfo [0]],否則它會將'$ stockInfo [0]'視爲字符串文字。 – liquorvicar 2012-02-10 09:57:50

回答

1

我並不確切地知道你的代碼,但我可以顯示呈現嵌套數組的例子:

$arr = array('1' => array('1', '2'), '2'); 

function showNested($array) 
{ 
    foreach($array as $key => $value) 
    { 
    if(is_array($value)) 
    { 
     echo $value; 
     showNested($array); 
    } 
    else 
    { 
     echo $value; 
    } 
    } 
} 

UPDATE

您在代碼中使用了$stocks['$stockInfo[0]']。我認爲這種語法永遠不會做任何事情。完全當你在一個字符串中使用一個變量時,你應該用{}包圍它。還有一件事我以前從未測試過,我不認爲在字符串中放置索引數組有助於PHP瞭解[]中的當前數據。

+0

對不起,我不能非常清楚(這是我第一次發佈)。我的問題不是如何讀取數組,但我如何存儲它?因爲array_push和直接分配似乎什麼都不做...... – nlowe 2012-02-09 21:37:09

+0

我無法理解。你是什​​麼意思的商店?你想讀取每個字段並將其存儲在另一個數組中?如果是,只需使用'$ arr [] = $ data'。我認爲使用老式的方式會更好,因爲使用'array_push'會對數組做一些操作,每次使用後都應該重置數組。我在某處讀過它。 – MahanGM 2012-02-10 16:22:12