1

私は本当にPHPの初心者であり、問​​題を解決する必要があると言い始めます。論理は知っていますが、構文では死んでいます。

これがケースです。

ループごとに 1 つずつ、3 つの異なる色のスパン クラスで画像を表示する wordpress ループを作成する必要があるため、0 = 緑、1 = 青、2 = ピンクになります。

私は3色とX個の出力を持っているので、0から2までの配列を作成し、説明した色に従って値を割り当て、次にi > 2の場合、i = 0のような条件を作成することを考えます.

これで、span クラスの配列値をエコーするだけで、うまくいくはずです。

私が助けを必要としているのは、これの構文を作成することです。これまでのところ、これは私が持っているものです:

<?php while ( have_posts() ) : the_post(); $i = 0 ?>
 <?php 
    $array = array(
      0 => 'green', 
      1 => 'blue', 
      2 => 'pink',
    ); 
  ?>
 <span class="<?php echo $array ?>;">Title</span>

 <?php
  $i++;
 ?>
 <?if ($i > 2) { $i=0; } endif; ?> 
<?php endwhile; ?> 

カウンター i を配列と比較する必要がある部分がありません。

助けていただければ幸いです!

前もって感謝します。

4

3 に答える 3

2

このコードにはいくつかの問題がありました(いくつかの提案もあります)。

  • $i = 0;whileループ内で定義していたので、常に== 0
  • $array1つのアイテムの代わりに印刷しようとしています

修正方法:

  • whileループの外側に移動$i = 0;します(ループの前に定義されます)
  • echo $array[$i]探しているアイテムIDをエコーするために使用します
  • モジュロ演算子を使用して剰余を取得し、$i / 3それをインデックスとして使用します

あなたもできます

  • 同じように動作する1行で配列を定義し$colors = array('green', 'blue', 'pink');ます-これは、PHPが0から始まるデフォルトのインデックスを使用するために機能します
  • $colors代わりにのような変数を使用$arrayして、何が起こっているのかを明確にします
  • タグの数を減らして、<?php物事をより明確に保つ
  • $colorsループの外側で配列(現在はと呼ばれています)を定義します

以下の完全なコードを参照してください

<?php 
  $colors = array(
    0 => 'green', 
    1 => 'blue', 
    2 => 'pink',
  ); 

  $i = 0;
  while ( $loop->have_posts() ) : $loop->the_post();    
?>
<span class="<?php echo $colors[$i % 3] ?>;">Title</span>
<?php
  $i++;
  endwhile;
?>

そして、さらなる簡素化

<?php 
  $colors = array('green', 'blue',  'pink'); 
  $i = 0;
  while ( $loop->have_posts() ) : $loop->the_post();    
?>
    <span class="<?php echo $colors[$i % 3] ?>;">Title</span>
<?php
    $i++;
  endwhile;
?>
于 2012-09-12T15:10:01.933 に答える
2

まず、$arrayループを実行するたびに再宣言しています。whileループを開始する前にそれを入れてください。

次に、インデックスを使用して、配列内の要素にアクセスする必要があります。

<span class="<?php echo $array[$i] ?>;">Title</span>

第三に、ループの$i = 0 に配置する必要があります。whileここで起こっているのは、$i変数が0毎回リセットされていることです。

于 2012-09-12T15:13:12.427 に答える
1

$array単一の配列要素(つまり)ではなく全体を出力し、ループ内の$array[$i]カウンター($i = 0)もリセットします。while

<?php 
    // a little bit cleaned up version of your code
    $array = array(
        0 => 'green', 
        1 => 'blue', 
        2 => 'pink',
    ); 

   $i = 0;
   while ( $loop->have_posts() ) : $loop->the_post();
?>
   <span class="<?php echo $array[$i] ?>;">Title</span>
<?php
    $i++;
    if ($i > 2) { $i=0; }

    endwhile; 
?> 
于 2012-09-12T15:09:24.800 に答える