php中的嵌套键值查找
我正在尝试为学校的一个班级制作一个“股票”网站,这是我第一次涉足php。基本上,该脚本从GoogleDocs电子表格中提取一个CSV文件,并(尝试)将这些值放入数组中供以后使用。我想展示前五名股票的涨跌情况,但我遇到了一些问题。以下是脚本的主要部分: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
<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
会对数组进行一些操作,每次使用后都应该重置数组。我在什么地方读过。