【问题标题】:How do I count elements in a while loop and apply css class?如何计算while循环中的元素并应用css类?
【发布时间】:2020-01-19 12:13:51
【问题描述】:

我有一个来自 ACF 的中继器,我想要的是循环和计数项目,并根据计数的项目输出一个特定的 css 类。

我能否获得帮助,以便 css 类的输出取决于计数的项目。例如,如果有六个项目,则类将是 col-6 等...

<?php 
    if( have_rows('rainbow') ):

    $counter = 0;
    while( have_rows('rainbow') ): the_row();

        // vars
        $name = get_sub_field('name');
        $age = get_sub_field('age');
        $cssClass = 'col';

        for($i = 0; $i < $counter; $i++) {

            if($counter === 6) {
                $cssClass = 'col-lg-4';
            } elseif ($counter == 4) {
                $cssClass = 'col-xl-6';
            }
            else {
                $cssClass = 'col';
            }

        }

        echo '<div class=\'' . $cssClass. '\'>';
            echo "<h4>" . $name . "</h4>";
            echo "<p>" . $age . "</p>";

            echo $counter;

        echo '</div>';


        $counter++;

    endwhile;

endif; 
?>

【问题讨论】:

  • 你为什么用for循环?
  • 您的问题仍未解决,请通过接受答案关闭此问题,这将对未来的访问者有所帮助

标签: php wordpress advanced-custom-fields


【解决方案1】:

不知道你为什么在这里使用for循环,$i &lt; $counter这个条件不能成立,因为$i$counter都是从0开始的。所以0 &lt; 0 == FALSE

您只需要删除 while 循环中的 for 循环。

或者,如果您在代码中的其他位置使用for 循环,那么您可以将条件移到for 循环之外。

第二种解决方案: 其次,如果你从 1 开始$counter,那么你可以达到你想要的结果,如给定的例子:

<?php
$array = array(1,2,3,4,5,6);
$counter = 1;
foreach ($array as $key => $value) {
    $cssClass = 'col';
    for($i = 0; $i < $counter; $i++) {
        if($counter === 6) {
            $cssClass = 'col-lg-4';
        } elseif ($counter == 4) {
            $cssClass = 'col-xl-6';
        }
        else {
            $cssClass = 'col';
        }
    }
    echo $cssClass."<br/>";
    $counter++;
}
?>

结果:

col
col
col
col-xl-6
col
col-lg-4

【讨论】:

  • @PaddyGriffin:很高兴帮助你,别忘了接受这个答案,这将对未来的访客有所帮助。
  • 我认为这解决了我的问题,但是当我在另一个项目中使用该代码时,它没有按预期工作。在第一个项目中,我让这段代码在模板部分文件中运行,该文件是从 foreach 循环中循环的正确触发的代码。
  • @PaddyGriffin:您可以根据需要更改 foreach 部分
【解决方案2】:
<?php 
$counter = 1;
while( have_rows('rainbow') ): the_row();
    // vars
    $name = get_sub_field('name');
    $age = get_sub_field('age');

    if ( $counter == 4 ) {
        $cssClass = 'col-xl-6';
    } elseif ( $counter == 6 ) {
        $cssClass = 'col-lg-4';
    } else {
        $cssClass = 'col';
    }

    echo '<div class="' . $cssClass . '">';
        echo "<h4>" . $name . "</h4>";
        echo "<p>" . $age . "</p>";
        echo $counter;
    echo '</div>';


    $counter++;

endwhile;

试试这个

【讨论】:

  • 感谢我更新了代码,我期待如果计数为 4,则会输出 col-xl-6 类,但它会输出 col。
猜你喜欢
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 2014-05-17
  • 2020-06-19
  • 2017-07-23
  • 1970-01-01
相关资源
最近更新 更多