Вложенные поиски Key-Value в php - PullRequest
2 голосов
/ 09 февраля 2012

Я пытаюсь сделать «стандартный» веб-сайт для класса в школе, и это мое первое погружение в php. По сути, скрипт извлекает файл CSV из электронной таблицы документов Google и (пытается) поместить значения в массив для последующего использования. Я бы хотел показать топ-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 Ответ

1 голос
/ 09 февраля 2012

Я не знаю точно о вашем коде, но могу показать пример для представления вложенных массивов:

$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 понять, что это за текущие данные в [].

...