php中的嵌套键值查找

php中的嵌套键值查找,php,arrays,web,stocks,array-push,Php,Arrays,Web,Stocks,Array Push,我正在尝试为学校的一个班级制作一个“股票”网站,这是我第一次涉足php。基本上,该脚本从GoogleDocs电子表格中提取一个CSV文件,并(尝试)将这些值放入数组中供以后使用。我想展示前五名股票的涨跌情况,但我遇到了一些问题。以下是脚本的主要部分: <html> <head> <?php #Global Variables $rising = array(); $falling = array(); $stocks

我正在尝试为学校的一个班级制作一个“股票”网站,这是我第一次涉足php。基本上,该脚本从GoogleDocs电子表格中提取一个CSV文件,并(尝试)将这些值放入数组中供以后使用。我想展示前五名股票的涨跌情况,但我遇到了一些问题。以下是脚本的主要部分:

<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;
...
?>


我不太清楚你的代码,但我可以展示一个展示嵌套数组的示例:

$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理解
[]

中的当前数据,因为您似乎没有在任何地方调用函数。顺便说一句,如果这是“家庭作业”,你应该给它贴上这样的标签,让人们知道。这不是家庭作业,函数在别处调用,很抱歉混淆了!我知道它正在执行,因为populateTicker()函数返回预期的数据。我的问题是$rising和$falling的数组分配似乎没有任何作用,因为数组仍然是空的…欢迎来到SO btw。很高兴你发现了这一点,我只是想建议一下!我建议您花一些时间让step调试器工作,另外您可能还想看看单元测试。我假设你有Java的经验。您的代码中还有一个错误:$rising['$stockInfo[0]']应该只是$rising[$stockInfo[0]],否则它会将'$stockInfo[0]'视为字符串文字。抱歉,我一定不是非常清楚(这是我第一次发布)。我的问题不是如何读取数组,而是如何存储它?因为array_push和straight up赋值似乎都不起作用……我不明白。你说的商店是什么意思?是否要读取每个字段并将其存储在另一个数组中?如果是,只需使用
$arr[]=$data
。我认为最好使用老式方式,因为使用
array\u push
会对数组进行一些操作,每次使用后都应该重置数组。我在什么地方读过。