2012-05-18 3 views
0

결과를 루프 내부에 표시하려고하지만 어떤 이유로 인해 루프가 내 = a =로 만들어 질 때 계속 표시됩니다. 끝에 $ _ str을 추가합니다. . 그러나 사용하는 경우. = 내 = 및 문자열을 끝에서. $ _ str 제거합니다 내 루프 내부에 표시하지만 달성하지 않으려 고 내 평균 목표는 foreach 루프 출력을 되돌릴 지 않습니다.루프 결과가 루프 외부에 표시됩니다.

내가 문제가있는 영역에 댓글을 달았습니다. 테스트 할 라인 중 하나를 주석 처리하고 내가 말하는 것을 보면서 코드를 이미 테스트 할 준비가되었습니다.

 <script type='text/javascript' src='http://www.google.com/jsapi'></script> 
     <?php 
     $file = file_get_contents("http://ichart.finance.yahoo.com/table.csv?s=GOOG&a=03&b=18&c=2004&d=04&e=17&f=2012&g=d&ignore=.csv"); 

      $stockcontent = str_replace('Date,Open,High,Low,Close,Volume,Adj Close', '', $file); 
      $stockcontent = trim($stockcontent); 

      $stockcontentex = str_getcsv($stockcontent, "\n"); 

      $i = 0; 
      $j = 0; 

      $_str = ''; 
      $_str .= "<script type='text/javascript'> 
       google.load('visualization', '1', {'packages':['annotatedtimeline']}); 
       google.setOnLoadCallback(drawChart); 
       function drawChart() { 
       var data = new google.visualization.DataTable(); 
       data.addColumn('date', 'Date'); 
       data.addColumn('number', 'High'); 
       data.addColumn('number', 'Low'); 
       data.addRows(["; 
      foreach($stockcontentex as $stockexplode){ 
       $stockex = explode(',',$stockcontentex[$i++]); 
       $stockexdate = explode('-', $stockex[0]); 
       $stockYear = $stockexdate[0]; 
       $stockMonth = $stockexdate[1]; 
       $stockDay = $stockexdate[2]; 
       $stockHigh = $stockex[2]; 
       $stockLow = $stockex[3]; 

    //right here is where I am having the problem. 
$_str = '[new Date('.$stockYear.', '.$stockMonth.', '.$stockDay.'), '.$stockHigh.', '.$stockLow.'],'. "\n".$_str; 


    //$_str .= '[new Date('.$stockYear.', '.$stockMonth.', '.$stockDay.'), '.$stockHigh.', '.$stockLow.'],'. "\n"; 

       } 

       $_str .= "]); 

       var chart = new google.visualization.AnnotatedTimeLine(document.getElementById('chart_div')); 
       chart.draw(data, {displayAnnotations: false}); 
       } 
      </script> 
      <div id='chart_div' style='width: 700px; height: 240px;'></div>"; 

       echo $_str; 
     ?> 

저에게 도움이 될만한 사람에게 감사드립니다.

+0

문제로 표시 한 줄에 대신 "$ _str = '[... $ StockYear.', ...]"$ _str. = ... "이되도록 하시겠습니까? –

+1

[HEREDOC] (http://php.net/heredoc) 및 [json_encode()] (http://php.net/json_encode)에서 실제로 읽어야합니다 .JavaScript를 PHP에서 직접 생성하는 것은 매우 위험합니다. 단일 잘못 배치 된 자바 스크립트 메타 문자 그리고 당신은 전체 자바 스크립트 코드 블록을 깨뜨릴 수 있습니다. –

+0

@tom_yes_tom 예, 결과를 반전하지 않기 때문에 주석 처리합니다 .. – user874185

답변

1
<script type='text/javascript' src='http://www.google.com/jsapi'></script> 
    <?php 
    $file = file_get_contents("http://ichart.finance.yahoo.com/table.csv?s=GOOG&a=03&b=18&c=2004&d=04&e=17&f=2012&g=d&ignore=.csv"); 

     $stockcontent = str_replace('Date,Open,High,Low,Close,Volume,Adj Close', '', $file); 
     $stockcontent = trim($stockcontent); 

     $stockcontentex = str_getcsv($stockcontent, "\n"); 

     $i = 0; 
     $j = 0; 

     $_str = ''; 
     $_str .= "<script type='text/javascript'> 
      google.load('visualization', '1', {'packages':['annotatedtimeline']}); 
      google.setOnLoadCallback(drawChart); 
      function drawChart() { 
      var data = new google.visualization.DataTable(); 
      data.addColumn('date', 'Date'); 
      data.addColumn('number', 'High'); 
      data.addColumn('number', 'Low'); 
      data.addRows(["; 

     $tstr = ""; 
     foreach($stockcontentex as $stockexplode){ 
      $stockex = explode(',',$stockexplode); // no need to do this $stockcontentex[$i++]); here 
      $stockexdate = explode('-', $stockex[0]); 
      $stockYear = $stockexdate[0]; 
      $stockMonth = $stockexdate[1]; 
      $stockDay = $stockexdate[2]; 
      $stockHigh = $stockex[2]; 
      $stockLow = $stockex[3]; 

      //right here is where I am having the problem. 
      $tstr = '[new Date('.$stockYear.', '.$stockMonth.', '.$stockDay.'), '.$stockHigh.', '.$stockLow.'],'. "\n".$tstr; 


      } 
     $_str = $_str.$tstr; // $x .= $xx; is just a shotcut for $x = $x.$xx; 
     $_str .= "]); 

     var chart = new google.visualization.AnnotatedTimeLine(document.getElementById('chart_div')); 
      chart.draw(data, {displayAnnotations: false}); 
      } 
     </script> 
     <div id='chart_div' style='width: 700px; height: 240px;'></div>"; 

     echo $_str; 
    ?> 
+0

'$ str. = $ new_str'는'$ str = $ str. $ new_str' 특별한 것은 없습니다. –