跳出for循环并在每轮变量回显后返回

时间:2017-09-14 15:52:16

标签: php twig opencart

我在twig / php中创建了一个函数来运行一个数组,并且只返回每个范围使用if语句匹配的数字。我必须复制这10次,并想知道最佳做法是什么(即是否有一个较短的手或我应该坚持这个)。

        <p>Ceiling</p>

        {% for category in categories|sort %}

            {% if category.range == "Ceiling" %} 
                <a href="{{ category.href }}"><li class="SubRange">{{ category.name }}</li></a>
            {% endif %}

        {% endfor %}

        <hr>

        <p>Lamps</p>

        {% for category in categories|sort %}

            {% if category.range == "Lamps" %} 
                <a href="{{ category.href }}"><li class="SubRange">{{ category.name }}</li></a>
            {% endif %}

        {% endfor %}

        <hr>

此示例中的范围是天花板和灯,它们只会打印出它们的范围。

控制器

            $data['categories'][] = array(
                'range' => $ProductRange,
                'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
                'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
            );

2 个答案:

答案 0 :(得分:0)

我尽量避免在数组中循环两次 - 这通常意味着你没有正确组织你的信息或者第一次没有做足够的事情。在您的情况下,您可以在将信息发送到模板之前将类别分类为灯和天花板。如果你将它放入categories变量中,它会将运行时间缩短一半,因为每个循环都会运行并打印所有内容。

你甚至可以制造灯具。和&#39;天花板&#39;数组键包含数组并在类别[&#39;灯&#39;]和类别[&#39; ceiling&#39;]上运行foreach。然后,您还可以显示类别(如果不为空),并在空白时显示相应的消息

答案 1 :(得分:0)

详细阐述@ Ice76的回答,

PHP

<?php
    $temp = fetchYourCategories();
    $categories_per_range = [];

    foreach($temp as $category) {
        if (!isset($categories[$category->range])) $categories[$category->range] = [];
        $categories[$category->range][] = $category;
    }

    echo $twig->render('template.twig', [ 'categories_per_range' => $categories_per_range, ]);

枝条

{% for range, categories in categories_per_range %}
    <h1>{{ range }}</h1>
    {% for category in categories %}
        <a href="{{ category.href }}"><li class="SubRange">{{ category.name }}</li></a>
    {% endfor %}        
    <hr />
{% endfor %}