【问题标题】:Loop an array based on condition in php根据php中的条件循环数组
【发布时间】:2018-01-05 06:30:19
【问题描述】:

我需要帮助来形成基于数组循环的 HTML div。

我的数组如下所示

$myarray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];

PHP 文件看起来像

<?php
foreach ($myarray as $arr) {
    //I dont know how to add condition here
    echo "<div class='custom_style'>" . $arr ."</div>";
}

我的输出应该是这样的

让我解释清楚。最初,我希望前 2 个数组键是大尺寸,然后接下来的 4 个是小尺寸。再次下一个 2 会很大,下一个 4 会很小..等等..我想以这种方式循环直到我的数组结束。

CSS部分请忽略,我自己写

【问题讨论】:

标签: php html arrays loops conditional


【解决方案1】:
  • 如果您只在 foreach 循环中声明键变量,则可以避免使用“计数器”。
  • 如果您利用模数运算符 (%),您可以避免使用多个条件。它将第一个数字除以第二个数字并输出余数。
  • foreach 循环提供的索引将从0 开始,因此您希望显示为大块的索引将包括:0,1,6,7,1213。当$i%6 应用于这些键时,输出将为01
  • 由于我们的 echo 语句中唯一改变的是类属性,因此无需重复完整的 &lt;div&gt; 行。 DRY 编程实践要求您只修改类值的结尾。为此,我选择了内联条件。

这是实现所需输出的最佳/最简单方法。

代码:(Demo)

$myarray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];
foreach ($myarray as $i=>$v){
    echo "<div class=\"cust",($i%6<2?1:2),"\">$v</div>\n";
}

输出:

<div class="cust1">1</div>
<div class="cust1">2</div>
<div class="cust2">3</div>
<div class="cust2">4</div>
<div class="cust2">5</div>
<div class="cust2">6</div>
<div class="cust1">7</div>
<div class="cust1">8</div>
<div class="cust2">9</div>
<div class="cust2">10</div>
<div class="cust2">11</div>
<div class="cust2">12</div>
<div class="cust1">13</div>
<div class="cust1">14</div>
<div class="cust2">15</div>
<div class="cust2">16</div>
<div class="cust2">17</div>
<div class="cust2">18</div>

或者,如果您不担心满足所有浏览器,您可以使用带有 nth-child()implode() 的纯 css 解决方案。

<style> 
div:nth-child(6n+1),div:nth-child(6n+2) {
    background: red;
}
</style>
<?php
$myarray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];
echo '<div>',implode('</div><div>',$myarray),'</div>';  // glue each value with a closing and opening div tag
?>

【讨论】:

    【解决方案2】:

    我现在为您的动态框编写逻辑,您需要创建您的 CSS。

    <html>
    <style>
    #cust_1
    {
        border: 1px solid red; 
        min-width:90px; 
        min-height:90px; 
        display: inline-block;
    }
    
    #cust_2
    {
        border: 1px solid red; 
        min-width:40px; 
        min-height:40px; 
        display: inline-block;
    }
    </style>
    <?php
    $myarray = array(1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12);
    $i = 1;
    
    foreach ($myarray as $arr)
     {
    
         if($i <= 2){
            echo "<div id=cust_1>". $arr . "</div>";
            $i++;
         }
        else if($i==6){ 
                $i=1;
            echo "<div id=cust_2>". $arr . "</div>";
        }else{
            echo "<div id=cust_2>". $arr . "</div>";
            $i++;
        }
     }
    ?>
    

    【讨论】:

    • Exprator 不仅第一个回答,而且他的回答并没有犯向 dom 声明重复 id 的错误。
    猜你喜欢
    • 2016-07-02
    • 2015-05-17
    • 2017-12-13
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多