优化循环逻辑以显示结构

时间:2015-12-24 22:32:43

标签: php logic structure formula

我想每行订购3篇文章,而每隔一行一篇文章都有一个宽大的图像,显​​示三个中的两个点。 这是我提出的代码,但对于那些简单易行的东西来说似乎很复杂。示例输出在底部。

也许有人知道可以做同样但更简单的事情。

谢谢!

<?php
    $i = 0;
    $x = 0;
    $first = false;
    $three = false;
    $five = true;
    foreach( range( 0, 27 ) as $k ) {
        if( $x != 0 && $x % 3 == 0 ) {
            echo "\n";
        }
        $x++;
        $i++;
        if( !$first && $i == 5 ) {
            $i = 0;
            $x++;
            $first = true;
            echo '[__]';
        }
        elseif( $first && !$three && $i == 4 ) {
            $i = 0;
            $x++;
            $three = true;
            $five = false;
            echo '[__]';
        }
        elseif( $first && !$five && $i == 6 ) {
            $i = 0;
            $x++;
            $three = false;
            $five = true;
            echo '[__]';
        }
        else echo '[]';
    }
?>

输出:

[][][]
[][__]
[][][]
[__][]
[][][]
[][__]
[][][]
[__][]
[][][]
[][__]
[][][]

2 个答案:

答案 0 :(得分:1)

假设你有27篇文章

$articles = 27 / 3;

我有这种方式希望它可以与你合作更新

<?php
    $x = false;
    for ($i = 0; $i < $articles; $i++) {
        for($j = 0;$j < 3;$j++) {
            if ($i % 2 == 0) {
                if ($x && $j % 2 == 0) {
                    echo '[ ] ';
                } else {
                    echo '[ _ ] ';
                    $x = !$x;
                    $j++;
                }
            } else {
                echo '[ ]';
            }
        }
        echo '<br />';
    }
?>

这是我的结果

enter image description here

更新1

只需将第一个循环更改为

$i=1 

所以它不能修改2所以你得到前三个,然后改变

if($x && $i % 2 == 0) 

像这样真实

if(!$x && $i % 2 == 0) 

示例

<?php
    $count = 7;
    $articles = ceil($count / 3);
    $articles = $articles + ceil(ceil($articles/2) / 3);
    $x = false;
    for ($i = 1; $i <= $articles; $i++) {
        if ($count == 0) break;
        for($j = 0;$j < 3;$j++) {
            if ($count == 0) break;
            if ($i % 2 == 0) {
                if (!$x && $j % 2 == 0) {
                    echo '[ ] ';
                } else {
                    echo '[ _ ] ';
                    $x = !$x;
                    $j++;
                }
            } else {
                echo '[ ]';
            }
            $count--;
        }
        echo '<br />';
    }
?>

图片结果

enter image description here

答案 1 :(得分:1)

如果有人需要它作为twig实现:

{% import _self as macros %}
{% set rows = ( items|length / 3 ) %}
{% set x = false %}
{% set y = 0 %}

{% for i in 1..rows+2 %}
    {% set skip = false %}
    {% for j in 0..2 %}
        {% if skip %}
            {% set skip = false %}
        {% else %}
            {% if i is divisible by(2) %}
                {% if x == false and j is divisible by(2) %}
                    {{ macros.item( items[y] ) }}
                    {% set y = y + 1 %}
                {% else %}
                    {{ macros.item( items[y], true ) }}
                    {% set y = y + 1 %}
                    {% set skip = true %}
                    {% if x == false  %}
                        {% set x = true %}
                    {% else %}
                        {% set x = false %}
                    {% endif %}
                {% endif %}
            {% else %}
                {{ macros.item( items[y] ) }}
                {% set y = y + 1 %}
            {% endif %}
        {% endif %}
    {% endfor %}
    <div class="clearfix"></div>
{% endfor %}

macro = bootstrap块元素,如果设置为true,则col宽度从4到8覆盖两个点 - 必须实现跳过变量,因为在twig中你无法编辑循环索引 - 添加了额外的独立计数器来完成文章数组,基于/ 3的行+2和每页共33篇文章。