php中的嵌套键值查找

时间:2012-02-09 18:06:19

标签: php arrays web stocks array-push

我正在尝试为学校的一个班级建立一个“股票”网站,这是我第一次潜入php。基本上,脚本从谷歌文档电子表格中提取CSV文件,并(尝试)将值放入数组中以供日后使用。我想展示前5名涨跌股票,但我遇到了问题。这是脚本的主要部分:

<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 更新2:我明白了。我来自java,并没有完全理解变量的范围如何在php中工作。一个简单的

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

做了这个伎俩

1 个答案:

答案 0 :(得分: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;
    }
  }
}

<强>更新

您在代码中使用了$stocks['$stockInfo[0]']。我认为这种语法永远不会做任何事情。完全在字符串中使用变量时,应将其{}括起来。还有一件我以前从未测试过的东西,我不认为在字符串中放入带索引的数组有助于PHP了解[]中当前数据的含义。