2012-05-21 4 views
0

У меня есть некоторые проблемы и мне нужно руководство. Я пытаюсь разобрать 3 csv-файла и помещать их внутри цикла foreach, но это ужасно не так. Строка $ stockClose не изменяется, она остается неизменной в течение цикла, $ nas_stock меняет каждые 20 циклов, и предполагается, что каждый цикл будет изменен, единственное, что, кажется, работает правильно, - это $ sp500_stock, им не понятно почемуПроводящий foreach в пределах foreach

$currentMonth = date('n'); 
    $currentMonth = $currentMonth - 1; 
    $prevcurrentMonth = date('n'); 
    $prevcurrentMonth = $prevcurrentMonth - 2; 
    $currentDay = date('j'); 
    $lastDay = $currentDay - 6; 
    $currentYear = date('Y'); 

    $filedow = file_get_contents("http://ichart.finance.yahoo.com/table.csv?s=%5EDJI&a=$prevcurrentMonth&b=$lastDay&c=$currentYear&d=$currentMonth&e=$currentDay&f=$currentYear&g=d&ignore=.csv"); 

    $filenas = file_get_contents("http://ichart.finance.yahoo.com/table.csv?s=%5EIXIC&a=$prevcurrentMonth&b=$lastDay&c=$currentYear&d=$currentMonth&e=$currentDay&f=$currentYear&g=d&ignore=.csv"); 

    $filesp500 = file_get_contents("http://ichart.finance.yahoo.com/table.csv?s=%5EGSPC&a=$prevcurrentMonth&b=$lastDay&c=$currentYear&d=$currentMonth&e=$currentDay&f=$currentYear&g=d&ignore=.csv"); 

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

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

    $stocknas = str_replace('Date,Open,High,Low,Close,Volume,Adj Close', '', $filenas); 
    $stocknas = trim($stocknas); 
$stocknasex = str_getcsv($stocknas, "\n"); 

    $stocksp500 = str_replace('Date,Open,High,Low,Close,Volume,Adj Close', '', $filesp500); 
    $stocksp500 = trim($stocksp500); 
$stocksp500ex = str_getcsv($stocksp500, "\n"); 

    $i = 0; 
    $j = 0; 

    $_str = ''; 
    $_str .= "<script type='text/javascript'> 
    google.load('visualization', '1', {packages: ['annotatedtimeline']}); 
function drawVisualization() { 
    var data = new google.visualization.DataTable(); 
    data.addColumn('date', 'Date'); 
    data.addColumn('number', 'Dow Jones'); 
    data.addColumn('number', 'Nasdaq'); 
    data.addColumn('number', 'S&P 500'); 
    data.addRows(["; 
    $tstr = ""; 
     $_str = ''; 
$_str .= "<script type='text/javascript'> 
    google.load('visualization', '1', {packages: ['annotatedtimeline']}); 
function drawVisualization() { 
    var data = new google.visualization.DataTable(); 
    data.addColumn('date', 'Date'); 
    data.addColumn('number', 'Dow Jones'); 
    data.addColumn('number', 'Nasdaq'); 
    data.addColumn('number', 'S&P 500'); 
    data.addRows(["; 
    $tstr = ""; 
     foreach($stocknasex as $nas){ 
      $nasex = explode(',',$nas); 
       $nas_stock = $nasex[4]; 
     } 

     foreach($stocksp500ex as $sp500){ 
      $sp500ex = explode(',',$sp500); 
       $sp500_stock = $sp500ex[4]; 
     } 
     foreach($stockcontentex as $stockexplode){ 
     $stockex = explode(',',$stockexplode); 
     $stockexdate = explode('-', $stockex[0]); 
     $stockYear = $stockexdate[0]; 
     $stockMonth = $stockexdate[1] - 1 ; 
     $stockDay = $stockexdate[2]; 
     $stockHigh = $stockex[2]; 
     $stockLow = $stockex[3]; 
     $stockClose = $stockex[4]; 




    } 

    for($i=0; $i<=30; $i++){ 
    $tstr = '[new Date('.$stockYear.', '.$stockMonth.', '.$stockDay.'), '.$stockClose.', '.$nas_stock.', '.$sp500_stock.'],'. "\n".$tstr; 
    } 
    $_str = $_str.$tstr; 
    $_str .= "]); 
    var annotatedtimeline = new google.visualization.AnnotatedTimeLine(document.getElementById('chart_div')); 
      annotatedtimeline.draw(data, { 
          //'allValuesSuffix': '%', // A suffix that is added to all values 
          'colors': ['#12577F', '#769422', '#999999'], // The colors to be used 
          'displayAnnotations': true, 
          'displayExactValues': true, // Do not truncate values (i.e. using K suffix) 
          'displayRangeSelector' : false, // Do not sow the range selector 
          'displayZoomButtons': true, // DO not display the zoom buttons 
          'legendPosition': 'newRow', // Can be sameRow 
          //'max': 600, // Override the automatic default 
          //'min': 500, // Override the automatic default 
          'scaleColumns': [0, 1], // Have two scales, by the first and second lines 
          'scaleType': 'allmaximized', // See docs... 
          'thickness': 2, // Make the lines thicker 
           }); 
    } 
      google.setOnLoadCallback(drawVisualization); 

</script><div style='float:left; border:1px solid #ccc;'> 
<div id='chart_div' style='width: 500px; height: 230px;'></div></div>"; 

    return $_str; 
    break; 

    } 

ответ

1

Что вы пытаетесь сделать? У вас есть вложенные петли. Вся петля $sp500 находится внутри корпуса петли $nas, а это означает, что $nas не будет повторяться до тех пор, пока $sp500 не пройдёт до первого значения $stocksp500ex. И петля $nas, в свою очередь, полностью находится внутри корпуса петли $stockexplode, а это значит, что $stockexplode не будет продвигаться до $nas, пройдя весь путь через $stocknasex.

Они как цифры в прилавке. Самая внутренняя петля - самая правая цифра, а следующий цикл не нажимает, пока внутренний не перевернется.

EDIT: Если вы пытаетесь перебрать все три массива параллельно, вы должны использовать одну петлю вместо трех вложенных из них. Может, что-то вроде этого?

$nasex_count = count($stocknasex); 
    $sp500_count = count($stocksp500ex); 
    $content_count = count($stockcontentex); 
    $max = max($nasex_count, $sp500_count, $content_count); 

    for ($i = 0; $i < $max; ++$i) { 
    if ($i < $nasex_count) { 
     ... do something with $stocknasex[$i] ... 
    } 

    if ($i < $sp500_count) { 
     ... do something with $stocksp500ex[$i] ... 
    } 

    if ($i < $content_count) { 
     ... do something with $stockcontentex[$i] ... 
    } 
    } 

Конечно, если вы знаете, что происходит в все три массива имеют одинаковый размер, вы можете пропустить max() и условными.

+0

Я пошел вперед и скорректировал свой код, я понимаю, что вы говорите, но я не слишком уверен, как исправить мою проблему. Я хочу, чтобы все они проходили мимо, не дожидаясь предыдущего. Я вытащил его из цикла foreach и наложил на него цикл for, но это просто заставляет их повторять один и тот же вывод на каждом цикле, а не наступать, я ценю, что вы взяли цикл и объяснили это мне – user874185

+0

Я до сих пор не понимаю именно то, что вы на самом деле пытаетесь выполнить. Отстаньте от мелочных деталей, подобных петлям; на высоком уровне, что вы пытаетесь сделать? Принимать данные из трех файлов CSV и делать с ними? Объединить его в один файл? –

+0

берет данные из всех 3 файлов и делает их печать в одном цикле – user874185

Смежные вопросы