2016-12-17 6 views
-1

これはしばらくしばらく私を困惑させました。私は自分のデータと次のデータを比較して、いつ行を変更するかを決定したいと思います。ところでforループのPHP定義されていないオフセット

<?php 
    $seasons; // laravel eloquent model from controller 
    $i = 0; 
    $max = count($seasons); 

    for($i; $i<$max; $i++): 
     $x = $i+1; 
     print_r($seasons[$i]); // ok 
     print_r($seasons[1]); // ok 
     print_r($seasons[0+1]); // ok 
     print_r($seasons[$x]); // undefined 
     print_r($seasons[$i+1]); // undefined 
    endfor; 
?> 
+0

私はなぜ今知っていると思います。 b/c $ xは配列内の最大インデックスよりも大きいので、未定義エラー – aahhaa

+1

'$ max = count($ seasons) - 1; '配列は' 0'で始まり、カウントは '1'で始まります。 –

答えて

2
<?php 
    $seasons; // laravel eloquent model from controller 
    $i = 0; 
    $max = count($seasons); 

    for($i; $i<$max; $i++): 
     $x = $i+1; 
     print_r($seasons[$i]); // ok 
     print_r($seasons[1]); // ok 
     print_r($seasons[0+1]); // ok 
     if(isset($seasons[$x])){ 
      print_r($seasons[$x]); // undefined 
     } 
    endfor; 
?> 

、$ xと$ I + 1これらの両方の線が同じです。なぜなら、$ x = $ i + 1;もう一度$ i + 1を実行しています。

0

最後のループで$ xが配列インデックスの限界を超えている可能性があるので、問題を解決するためのチェックを入れます。他の誰かがそれをやるより良い方法を持っているなら、私にも教えてください。

$i = 0; 
$max = count($seasons); 

for($i; $i<$max; $i++): 
    $x = $i+1; 
    if($x < $max): 
     if($seasons[$i]->month != $seasons[$x]->month) 
      // do something 
     endif 
    endif; 
endfor;  
+1

ループ内では、上記のコードは条件を満たしていれば2を解析していますが、issetインデックスを使用している場合は1で終わることがあります。 –

関連する問題