2017-09-26 36 views
-1

我生成一系列链接,并使用CSS应用的关联颜色条。有5种色调,在不透明度降低,起始于100和20为增量下降所以,如果我有10个行会是这样的:PHP - 动态设置CSS类在foreach中

<a href="link.php"> 
 
    <span class="linkcolour"></span> 
 
    <span class="linkText">Heading 100</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour o80"></span> 
 
    <span class="linkText">Heading 80</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour o60"></span> 
 
    <span class="linkText">Heading 60</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour o40"></span> 
 
    <span class="linkText ">Heading 40</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour o20"></span> 
 
    <span class="linkText">Heading 20</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour"></span> 
 
    <span class="linkText">Heading 100</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour o80"></span> 
 
    <span class="linkText">Heading 80</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour o60"></span> 
 
    <span class="linkText">Heading 60</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour o40"></span> 
 
    <span class="linkText ">Heading 40</span> 
 
</a> 
 
<a href="link.php"> 
 
    <span class="linkcolour o20"></span> 
 
    <span class="linkText">Heading 20</span> 
 
</a>

我苦思以动态方式设置linkcolour类属性,以便第一项设置为“linkcolour”,第二项“linkcolour o80”,3d“linkcolour o60”等。 5件物品后,重新开始并根据需要重复。这里是我的foreach循环结构:

<?php 
foreach($linkItems as $item) { 
    $linkItem = $item->getField('Link'); 
    $linkColour = ''; 
    ?> 

    <a href="link.php"> 
     <span class="<?php echo $linkColour; ?>"></span> 
     <span class="linkText"><?php echo $linkItem; ?></span> 
    </a> 
<?php 
} // foreach $linkItems 
?> 

我不能工作的语法来设置$linkColour变量,因此它遵循上述的模式?

+0

你可以键入值 'foreach($ linkItems as $ key => $ item){}'根据关键字,你可以编写一个switch case并向它添加class。 – RamaKrishna

回答

0

有很多方法可以解决这个问题。例如,您可以在数组中声明可用的CSS类并循环遍历它们。修改你的榜样,你可以使用类似下面的

<?php 
$linkColourArray = ["","o80","o60","o40","o20"]; 
$count = 0; 
foreach($linkItems as $item) { 
    $linkItem = $item->getField('Link'); 
    $colourIndex = $count%5; 
    $linkColour = $linkColourArray[$colourIndex]; 
    $count++; 
    ?> 

    <a href="link.php"> 
     <span class="linkcolour <?php echo $linkColour; ?>"></span> 
     <span class="linkText"><?php echo $linkItem; ?></span> 
    </a> 
<?php 
} // foreach $linkItems 
?> 
0

我会用%操作这给一个除法的余数:

$i = 0; 

for ($linkItems as $item) { 
     $linkColour = 'linkcolour'; 
     $mod = $i % 5; 
     if ($mod != 0) { 
       $linkColour .= ' o'.(100 - (20 * $mod)) ; 
     } 

     echo $linkColour."\n"; 
     $i++; 
} 

例如:

  • 3 % 5 -> 3,因为:3/5 = 0 * 5 + 3
  • 6 % 5 -> 1,因为:6/5 = 1 * 5 + 1

然后,如果你有剩余的0,那么你的迭代次数是5的倍数,所以你不应用这个类。

否则,您可以将余数乘以20并将其减去100以纠正班级。

  • 1 % 5 = 1 -> class would be 100 - 1 * 20 = 80
  • 2 % 5 = 2 -> class would be 100 - 2 * 20 = 60
  • ...
  • 5 % 5 = 0 -> do not add class

等等等等

输出:

linkcolour 
linkcolour o80 
linkcolour o60 
linkcolour o40 
linkcolour o20 
linkcolour 
linkcolour o80 
linkcolour o60 
... 
0

做一个数组,只是遍历数组来得到这样的输出低于

<?php 

$arraycolor = array('linkcolour','linkcolour o80','linkcolour o60','linkcolour o40','linkcolour o20'); 

$link = array('1','2','3','4','5','6','7','8','9','10'); 

$i=0; 
foreach($link as $v) 
{ 

?> 
<a href="link.php"> 
     <span class="<?php echo $arraycolor[$i] ?>"></span> 
     <span class="linkText"><?php echo $arraycolor[$i] ?></span> 
    </a> 
<br/> 
<?php 
    $i++; 
    if($i==count($arraycolor)) 
    { 
     $i=0; 
    } 

} 
?> 

值:

在foreach循环
linkcolour 
linkcolour o80 
linkcolour o60 
linkcolour o40 
linkcolour o20 
linkcolour 
linkcolour o80 
linkcolour o60 
linkcolour o40 
linkcolour o20