包装while循环会创建额外的div

时间:2018-08-22 21:31:38

标签: php

我有这段代码,恰好有3、6、9等项目时会创建一个额外的空div。

<?php
    $i = 1;
    echo '<div class="three-item-wrapper">';

    if( have_rows('upcoming_stops_asia') ): while ( have_rows('upcoming_stops_asia') ) : the_row();
    ?>

    <div class="item">Content</div>

<?php

if($i % 3 == 0) {echo '</div><div class="three-item-wrapper">';}

$i++; endif; endwhile; endif;

echo '</div>'; 

?>

我不确定该如何解决。

1 个答案:

答案 0 :(得分:2)

您将结束当前的div并在达到3的倍数时开始一个新的div。如果此后没有更多内容,则div当然将为空。一种解决方案是累积结果并仅在需要时才将它们输出到div中:

<?php
if( have_rows('upcoming_stops_asia') ) {
    $results = [];

    while ( have_rows('upcoming_stops_asia') ) {
        the_row();

        // Add to the collection of results
        $results[] = '<div class="item">Content</div>';

        if( count($results) == 3 ) {
            // Output three results and reset
            echo '<div class="three-item-wrapper">' . implode($results) . '</div>';
            $results = [];
        }
    }

    // Output any additional results; no div generated if there aren't any
    if( !empty(results) ){
        echo '<div class="three-item-wrapper">' . implode($results) . '</div>';
    }
}
?>