嵌套的PHP数组,比父类短

问题描述 投票:0回答:2

确定,所以我有两个数组-一个用于发布,一个有限的5个值的数组,用于提供每个发布的颜色。我想要的是让帖子循环显示颜色数组,以便每6个位置重新开始。我现在正在做的事情本身只在数量有限的帖子中起作用,但这有点琐,不是很优雅:

$colors = array('yellow', 'red', 'blue', 'green', 'purple');

foreach($posts as $i => $post) {
  $color = $colors[$i];
  if ($i >= count($colors)) {
    $color = $colors[-count($colors) + $i];
    if ($i >= (count($colors) * 2)) {
      $color = $colors[(-count($colors) * 2) + $i];
    }
  }
//Do stuff here
}

我确定有更聪明的方法可以做到这一点,我只是不知道如何。

php arrays loops multidimensional-array foreach
2个回答
0
投票

模数5(%5)将进行快速修复

for($i=0;$i<count($posts);$i++){
   $color=$colors[$i%5];
   # todo here
}

0
投票

为了使$ posts具有无限nr的功能,每次达到$ iColors $ colors中条目的最大nr时,都必须将索引重置为0。

示例代码:

$html = '';
$colors = array('yellow', 'red', 'blue', 'green', 'purple');

// generate 100 posts for testing
$posts = array();
for ($i = 1; $i <= 100; $i++) {
    $posts[] = 'post' . $i;
}

$iColor = 0;
$iColorMaxCount = count($colors) - 1;

foreach ($posts as $index => $post) {

    $color = $colors[$iColor];

    /**
     * increment $iColor + 1
     * if $iColor reached max index of array $colors reset to index 0
     */
    $iColor = $iColor < $iColorMaxCount ? $iColor + 1 : 0;

    //Do stuff here
    $html .= '<h1 style="color:' . $color . ';">' . $post . '<h1>' . PHP_EOL;
}

echo $html;
© www.soinside.com 2019 - 2024. All rights reserved.