在php中设置每个第n个范围

时间:2013-12-23 16:09:26

标签: php wordpress loops

我正在尝试为循环中的每个第3个第4个和第5个元素实现特定的样式。我知道在CSS中它是可能的,但我也想在PHP中学习它。以下代码将类插入到每个第3个元素。

global $post_num;
if ( ++$post_num % 3 == 0 )
    $class = 'whatever';
echo $class;

我已经尝试了if ( ++$post_num % 3 == 0 ) && ( ++$post_num % 4 == 0 ) && ( ++$post_num % 5 == 0 ),但它不起作用

3 个答案:

答案 0 :(得分:2)

问题似乎是你试图在$post_num子句中多次递增if。试试这个。

global $post_num;
$class = '';
if (($post_num % 3 == 0) || ($post_num % 4 == 0) || ($post_num % 5 == 0)) {
  $class = 'whatever';
  ++$post_num;
}
echo $class;

但是说,我仍然不清楚++$post_num扮演什么角色,因为这个逻辑不会放在更大的循环中?那么这不会起作用吗?

global $post_num;
$class = '';
if (($post_num % 3 == 0) || ($post_num % 4 == 0) || ($post_num % 5 == 0)) {
  $class = 'whatever';
}
echo $class;

含义$post_num是基于滚动脚本逻辑的内容的值吗?这个条款只会取$post_num的值并对其采取行动?如果你有更多的代码来说明你所拥有的结构会有所帮助。

编辑只需为此示例添加自己的循环,以便更清楚地发生了什么。

for ($post_num = 1; $post_num <= 20; $post_num++) {
  $class = '';
  if (($post_num % 3 == 0) || ($post_num % 4 == 0) || ($post_num % 5 == 0)) {
    $class = 'whatever';
  }
  echo $post_num . ' | ' . $class . '<br />';
}

但是看输出可能不是你所期望的,因为具有模数(%)运算符的第3,第4或第5运算符将包含一系列可整除的项:

1 | 
2 | 
3 | whatever
4 | whatever
5 | whatever
6 | whatever
7 | 
8 | whatever
9 | whatever
10 | whatever
11 | 
12 | whatever
13 | 
14 | 
15 | whatever
16 | whatever
17 | 
18 | whatever
19 | 
20 | whatever

另一个编辑好的,我想我现在知道了。我将模数的值分配给$post_count的最大数字,然后我在$class_value_array中为要分配类的项设置数组,然后现在为if子句设置数组使用in_array()进行验证。

for ($post_num = 1; $post_num <= 20; $post_num++) {
  $class = '';
  $post_count = $post_num % 5;
  $class_value_array = array(0, 3, 4);
  if (in_array($post_count, $class_value_array)) {
    $class = 'whatever';
  }
  echo $post_count . ' | ' . $post_num . ' | ' . $class . '<br />';
}

输出现在是:

1 | 1 | 
2 | 2 | 
3 | 3 | whatever
4 | 4 | whatever
0 | 5 | whatever
1 | 6 | 
2 | 7 | 
3 | 8 | whatever
4 | 9 | whatever
0 | 10 | whatever
1 | 11 | 
2 | 12 | 
3 | 13 | whatever
4 | 14 | whatever
0 | 15 | whatever
1 | 16 | 
2 | 17 | 
3 | 18 | whatever
4 | 19 | whatever
0 | 20 | whatever

我很确定你正在寻找的是什么。

答案 1 :(得分:0)

if ( ++$post_num % 3 == 0 ) && ( ++$post_num % 4 == 0 ) && ( ++$post_num % 5 == 0 )

将为每个gcd(3,4,5)=第60行提供课程。只是做:

if  ( ++$post_num % 5 == 0 )

五个

if( ++$post_num % 4 == 0 )

for 4,等等。

答案 2 :(得分:0)

看起来您想要将单独的样式应用于第三,第四和第五项。为什么复杂的事情?只需添加一个类,表明该元素是系列中的第三,第四或第五个元素。您可以使用CSS来确定元素是否为组合。您不想使用CSS,我认为这意味着您不想使用nth-child选择器。

此代码不仅仅是CSS / HTML,您可以轻松地将代码从应用类更改为执行函数,例如。

for ( $i = 0; $i < 300; $i++ ) {
  $classes = array();
  if ( $i % 3 == 0 ) $classes[] = 'tri';
  if ( $i % 4 == 0 ) $classes[] = 'quad';
  if ( $i % 5 == 0 ) $classes[] = 'quint'; 

  echo "<div class='" . implode(' ', $classes), "'>Number " . $i . "</div>";
}

此时只需设置类的样式。这是输出:

<div class="tri quad quint">Number 0</div>
<div class="">Number 1</div>
<div class="">Number 2</div>
<div class="tri">Number 3</div>
<div class="quad">Number 4</div>
<div class="quint">Number 5</div>
<div class="tri">Number 6</div>
<div class="">Number 7</div>
<div class="quad">Number 8</div>
<div class="tri">Number 9</div>
<div class="quint">Number 10</div>