학교에서 수업을위한 "주식"웹 사이트를 만들려고하고 있으며, PHP에 대한 첫 번째 다이빙입니다. 기본적으로 스크립트는 CSV 파일을 Google 워드 프로세서 스프레드 시트 형식으로 가져오고 나중에 값을 배열에 넣으려고 시도합니다. 나는 5 대 상승 및 하락 주식을 보여주고 싶지만 문제가 있습니다. 스크립트의 주요 섹션은 다음과 같습니다.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 : 알아 냈습니다. 나는 자바에서 왔고, 변수의 범위가 PHP에서 어떻게 작동하는지 완전히 이해하지 못했다. 간단한
<?php
global $rising, $falling, $stocks;
...
?>
는
아무 데서도 전화를 걸지 않는 것 같습니다. btw 이것이 "숙제"인 경우 사람들이 알 수 있도록 태그를 지정해야합니다. – liquorvicar
숙제가 아니며 그 기능은 다른 곳에서 호출됩니다. 혼란스러워서 죄송합니다! populateTicker() 함수가 예상 한 데이터를 반환하므로 실행 중임을 알 수 있습니다. 내가 문제가있는 것은 $ rising과 $ falling에 대한 배열 할당이 배열이 공백으로 남아 있기 때문에 아무 것도하지 않는 것입니다. – nlowe
SO BTT에 오신 것을 환영합니다. 당신이 그것을 알아 냈기 때문에 기뻤습니다. 나는 그걸 제안하려고했습니다! 스텝 디버거를 작동시키는 데 약간의 시간을 투자 할 것을 권한다. 단, 단위 테스트를 원할 수도있다. 나는 당신이 자바에서 오는 이런 것들에 대한 경험이 있다고 가정하고있다. 또한 코드에 버그가 있습니다 : $ rising [ '$ stockinfo [0]']은 $ rising [$ stockInfo [0]]이어야합니다. 그렇지 않으면 $ stockInfo [0]을 문자열 리터럴로 처리합니다. – liquorvicar