【问题标题】:PHP loops and Nth iterationsPHP 循环和第 N 次迭代
【发布时间】:2016-01-29 16:18:10
【问题描述】:

假设我在这样的数组中有以下链接:

<?php 
  $links = array(
    array("Link 1", "link_href"),
    array("Link 2", "link_href"),
    array("Link 3", "link_href"),
    array("Link 4", "link_href"),
    array("Link 5", "link_href"),
    array("Link 6", "link_href"),
    array("Link 7", "link_href"),
    array("Link 8", "link_href")
  );
?>

如何使用 PHP 循环实现以下 HTML 输出,其中row 的 div 类每隔四个锚输出包装内部元素,如下所示:

<div class="row">
  <div class="col-xs-3 col-sm-6">
    <a href="#">Link 1</a>
  </div>
  <div class="col-xs-3 col-sm-6">
    <a href="#">Link 2</a>
  </div>
  <div class="col-xs-3 col-sm-6">
    <a href="#">Link 3</a>
  </div>
  <div class="col-xs-3 col-sm-6">
    <a href="#">Link 4</a>
  </div>
</div>
<div class="row">
  <div class="col-xs-3 col-sm-6">
    <a href="#">Link 5</a>
  </div>
  <div class="col-xs-3 col-sm-6">
    <a href="#">Link 6</a>
  </div>
  <div class="col-xs-3 col-sm-6">
    <a href="#">Link 7</a>
  </div>
  <div class="col-xs-3 col-sm-6">
    <a href="#">Link 8</a>
  </div>
</div>

任何帮助将不胜感激。

【问题讨论】:

  • 添加计数器并计数到 4。
  • 您也不要Need 将它们包装成 4 行...尤其是因为您使用的是 -xs- 大小
  • 对不起@cmorrissey,你是对的。引导类只是为了清晰起见,但我们实际上使用了多个引导类 -sm- -md- 和 -lg-
  • @u_mulder 你有没有机会提供一个例子? :)

标签: php arrays loops multidimensional-array twitter-bootstrap-3


【解决方案1】:

使用 array_chunk() 将数组拆分为大小为 4 的数组,然后使用 foreach 逐行迭代数据。

$links = array(
  array("Link 1", "link_href1"),
  array("Link 2", "link_href2"),
  array("Link 3", "link_href3"),
  array("Link 4", "link_href4"),
  array("Link 5", "link_href5"),
  array("Link 6", "link_href6"),
  array("Link 7", "link_href7"),
  array("Link 8", "link_href8"),
  array("Link 9", "link_href9"),
);

$divsPerRow = 4;
foreach(array_chunk($links,$divsPerRow) as $row) {
  echo "<div class=\"row\">\n";
  foreach($row as $col) {
    list($label,$link) = $col;
    echo "\t<div class=\"col-xs-3 col-sm-6\">\n\t\t<a href=\"$link\">$label</a>\n\t</div>\n";
  }
  echo "</div>\n";
}

甚至可以处理count($links) 不是4 的倍数的情况。只需将$divsPerRow 设置为所需的值。

输出:

<div class="row">
    <div class="col-xs-3 col-sm-6">
        <a href="link_href1">Link 1</a>
    </div>
    <div class="col-xs-3 col-sm-6">
        <a href="link_href2">Link 2</a>
    </div>
    <div class="col-xs-3 col-sm-6">
        <a href="link_href3">Link 3</a>
    </div>
    <div class="col-xs-3 col-sm-6">
        <a href="link_href4">Link 4</a>
    </div>
</div>
<div class="row">
    <div class="col-xs-3 col-sm-6">
        <a href="link_href5">Link 5</a>
    </div>
    <div class="col-xs-3 col-sm-6">
        <a href="link_href6">Link 6</a>
    </div>
    <div class="col-xs-3 col-sm-6">
        <a href="link_href7">Link 7</a>
    </div>
    <div class="col-xs-3 col-sm-6">
        <a href="link_href8">Link 8</a>
    </div>
</div>
<div class="row">
    <div class="col-xs-3 col-sm-6">
        <a href="link_href9">Link 9</a>
    </div>
</div>

可以在以下位置找到实时示例:http://sandbox.onlinephpfunctions.com/code/0075882e8abeda68ed1807b6d738714145b302e8

【讨论】:

    【解决方案2】:

    看来您正在使用 12 列网格(可能是引导程序)。如果不仅可以将内容放入正确的 div 中,而且还可以使用 php 变量更改样式,这可能会有所帮助。这是一个可能对您有所帮助的小代码片段:

    $colSize = 3;
    $colPrefix = "col-xs";
    $numPerRow = 12/$colSize;
    
    for($ii = 0; $ii<count($links); $ii++) {
        if ($ii % $numPerRow == 0) {
            echo "<div class='row'>\n";
        }
            echo "\t<div class='$colPrefix-$colSize'>\n";
            echo "\t\t<a href='{$links[$ii][1]}'>{$links[$ii][0]}</a>\n";
            echo "\t</div>\n";
    
        if ($ii % $numPerRow == $numPerRow-1 || $ii == count($links)-1) {
            echo "</div>\n";
        }
    }
    

    当然,这只是一个起点。如果你想硬编码一些 html 类而不是使用 PHP 变量,它应该很容易改变。重要的部分是您可以将$numPerRow 设置为您需要的任何内容,代码将从那里开始工作。

    【讨论】:

    • 太棒了!非常感谢这个答案 - 这是一个很好的起点,我喜欢将类名传递给变量的想法。
    【解决方案3】:

    你也可以试试 foreach 循环:

    $i = 0;  
    foreach ($links as $link) {  
        if ($i == 0) {  
            echo '<div class="row">';  
        }  
        #...  
        echo '<a href="' . $link[1] . '">' . $link[0] . '</a>';  
        #...  
        ++$i;  
        if ($i == 4) {  
            echo '</div>';  
            $i = 0;  
        }  
    }  
    if ($i != 0) {  
        echo '</div>';  
    }  
    

    【讨论】: