PHP数组的问题

时间:2012-09-12 15:07:28

标签: php arrays

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

情况就是这样。

我需要创建一个wordpress循环,它将显示带有3种不同颜色的span类的图像,每个循环1个,所以它变为0 =绿色,1 =蓝色,2 =粉红色。

由于我有3个颜色X个输出,我想创建一个从0到2的数组,根据我描述的颜色分配一个值,然后创建一个条件,如果我> 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与数组进行比较的部分。

我很感激任何帮助!

提前致谢。

3 个答案:

答案 0 :(得分:2)

此代码存在一些问题(以及一些建议)。

  • 您在while循环中定义了$i = 0;,这意味着它始终是== 0
  • 您正在尝试打印$array而不是一个项目

如何修复

  • $i = 0;移到while循环之外(因此它在循环之前定义)
  • 使用echo $array[$i]来回显您正在寻找的商品ID
  • 使用模运算符获取$i / 3的余数并将其用作索引

你也可以

  • 在一行$colors = array('green', 'blue', 'pink');上定义数组,其行为相同 - 这适用于PHP使用从0开始的默认索引<​​/ li>
  • 使用$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;
?>

答案 1 :(得分:2)

首先,每次运行循环时都要重新声明$array。在开始while循环之前将其放入。

其次,您需要使用索引来访问数组中的元素:

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

第三,您需要将$i = 0 放在 while循环之前。这里发生的事情是$i变量每次都被重置为0

答案 2 :(得分: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; 
?>