web-dev-qa-db-ja.com

PHP:ループのN番目の繰り返しごとにどのように決定しますか?

私のコードはXML経由で3つの投稿ごとに画像をエコーし​​たかったです:

<?php
// URL of the XML feed.
$feed = 'test.xml';
// How many items do we want to display?
//$display = 3;
// Check our XML file exists
if(!file_exists($feed)) {
  die('The XML file could not be found!');
}
// First, open the XML file.
$xml = simplexml_load_file($feed);
// Set the counter for counting how many items we've displayed.
$counter = 0;
// Start the loop to display each item.
foreach($xml->post as $post) {
  echo ' 
  <div style="float:left; width: 180px; margin-top:20px; margin-bottom:10px;">
 image file</a> <div class="design-sample-txt">'. $post->author.'</div></div>
';

  // Increase the counter by one.
  $counter++;
  // Check to display all the items we want to.
  if($counter >= 3) {
    echo 'image file';
    }
  //if($counter == $display) {
    // Yes. End the loop.
   // break;
  //}
  // No. Continue.
}
?>

最初の3つのサンプルは正しいですが、idgc.ca/web-design-samples-testing.phpをループしません。

52
kwek-kwek

最も簡単な方法は、モジュラス除算演算子を使用することです。

if ($counter % 3 == 0) {
   echo 'image file';
}

仕組み:モジュラス除算は剰余を返します。偶数の倍数の場合、剰余は常に0に等しくなります。

キャッチが1つあります:0 % 3は0に等しい。これは、カウンターが0から始まる場合、予期しない結果になる可能性がある。

138
Powerlord

@Powerlordの答えから離れて、

「キャッチが1つあります。0%3は0です。カウンターが0から始まると、予期しない結果になる可能性があります。」

カウンタは0(配列、クエリ)から開始できますが、オフセットできます

if (($counter + 1) % 3 == 0) {
  echo 'image file';
}
10
Hatrix

PHPマニュアル内の here にあるモジュロ算術演算を使用してください。

例えば.

$x = 3;

for($i=0; $i<10; $i++)
{
    if($i % $x == 0)
    {
        // display image
    }
}

モジュラス計算の詳細を理解するには、 here をクリックしてください。

9
Greg B

3投稿ごとですか?

if($counter % 3 == 0){
    echo IMAGE;
}
5
mateusza

方法:if(($ counter%$ display)== 0)

2
Ivar

私はこれを使用してステータスの更新を行い、1000回の反復ごとに「+」文字を表示していますが、うまく機能しているようです。

if ($ucounter % 1000 == 0) { echo '+'; }
2
meme

モジュラスなしでも実行できます。一致したらカウンターをリセットします。

if($counter == 2) { // matches every 3 iterations
   echo 'image-file';
   $counter = 0; 
}
1
Julez

最初の位置では機能しないため、より良い解決策は次のとおりです。

if ($counter != 0 && $counter % 3 == 0) {
   echo 'image file';
}

自分で確認してください。 4番目の要素ごとにクラスを追加するためにテストしました。

0
Mohan