1

我将开始说我真的是 PHP 的菜鸟,我需要解决一个问题,我知道逻辑,但是在语法上我已经死了。

情况就是这样。

我需要创建一个 wordpress 循环,它将显示具有 3 种不同颜色的 span 类的图像,每个循环 1 个,因此,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
  • 您正在尝试打印$array而不是一个项目

如何修复

  • 移出$i = 0;while 循环(所以它在循环之前定义)
  • 用于echo $array[$i]回显您要查找的项目 ID
  • 使用模运算符获取余数$i / 3并将其用作索引

你也可以

  • 在一行上定义$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 回答