【问题标题】:PHP make array go back to 0 when reached last item到达最后一项时,PHP使数组返回0
【发布时间】:2016-04-15 12:39:39
【问题描述】:

我有一个包含 6 种不同颜色的数组,如下所示:

$colors = array(
        'dd0330',
        'e49fca',
        'a776a6',
        'f7e300',
        'f78f1e',
        'd12a2f',
);

我有一个循环,我将一些东西存储在一个数组中,我为每个元素添加一种颜色。但是数组可以有超过 6 个的项目,所以当第六种颜色被送出时,我希望重置计数器

这是我尝试过的:

$loop_counter = 0;
if ( $orders->have_posts() ){
   while ($orders->have_posts()) : $orders->the_post(); 
      ...
      $myOrders[] = array( 'name' => $name,
                                 'schedule' => $activiteiten, 
                                 'link' => $link, 
                                 'color' => $colors[$loop_counter],
                                 'catering' => $catering,
                               ); 
       ...
       if($loop_counter = 5){
           $loop_counter = 0;
       }
       $loop_counter++;
    endwhile; 
}

但这似乎给了我的第一个项目第一个颜色和其他所有的第二个。

有人知道如何重置我的计数器吗?

非常感谢!

【问题讨论】:

  • 在条件中使用 double == 例如:if($loop_counter == 5)。
  • 使用 "endwhile;"看起来好丑……你为什么不用{ }

标签: php arrays loops


【解决方案1】:

如此接近!

试试

if($loop_counter == 5)

你需要一个等价关系,而不是等价关系

另外,如果你要在 if 之后使用 $loop_counter++,你的 if 应该设置 $loop_counter = -1。

【讨论】:

  • 哇,我觉得== 太愚蠢了哈哈。我已将我的$loop_counter++ 放在我的上方,如果是这样,我们都很好!谢谢!
【解决方案2】:

你可以做得更好。

$myOrders[] = array( 'name' => $name,
                             'schedule' => $activiteiten, 
                             'link' => $link, 
                             'color' => $colors[$loop_counter % 6],
                             'catering' => $catering,
                           );

% 为您提供余数,您无需检查和重置计数器。

如果可以改变颜色的数量,使用

$colors_num = count($colors);
// ...
                            'color' => $colors[$loop_counter % $colors_num],
// ...

【讨论】:

    【解决方案3】:

    您可以创建一个ArrayIterator,而不是将最大值硬编码到您的 if 语句中,例如

    $it = new ArrayIterator($colors);
    if ( $orders->have_posts() ){
       while ($orders->have_posts()) : $orders->the_post(); 
          //...
          if(!$it->valid()){
              $it->rewind();
          }
          $myOrders[] = array( 'name' => $name,
                                     'schedule' => $activiteiten, 
                                     'link' => $link, 
                                     'color' => $it->current(),
                                     'catering' => $catering,
                                   ); 
           //...
           $it->next();
        endwhile; 
    }
    

    【讨论】:

    • 这也有效,而且更干净。但是颜色的数量是固定的。无论如何,谢谢!
    【解决方案4】:
         $loop_counter++;
     if($loop_counter == 6){
                   $loop_counter = 0;
               }
    

    可以试试这个

    【讨论】:

      【解决方案5】:

      PHP 数组函数 reset() 专门用于此目的。

      if ($loop_counter == 6) {
       reset($colors);
      }
      

      这会将您的数组指针重置为第一个元素。

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 2019-01-12
        • 1970-01-01
        • 2021-08-07
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-03
        相关资源
        最近更新 更多