HTML 每第 n 次迭代都有一个扭曲——第 n 次改变每 x 次使用数组值

HTML every nth iteration with a twist--the nth changes every xth time using array values

每个人都知道如何在 foreach 循环中每第 n 次迭代输出一点 html。

$i=0;
foreach($info as $key){
    if($i%3 == 0) {
      echo $i > 0 ? "</div>" : ""; // close div if it's not the first
      echo "<div>";
    }
    //do stuff
$i++;
}

我正在尝试做同样的事情,但不是 $i 的已知值,而是从

这样的数组中提取值
Array(0=>2, 1=>1, 2=>5)

所以

<div>
  item
  item
  item
</div>
<div>
  item
  item
  item
</div>
<div>
  item
  item
  item
</div>

我可以得到这样的东西:

<div>
  item
  item
</div>
<div>
  item
</div>
<div>
  item
  item
  item
  item
  item
</div>

但我无法让它工作。我想我很接近,但有些东西正在逃避我。有什么想法吗?

这是我现在 运行 的代码:

//$footnote = array of values
$i=0;
$m=0;
$bridge .= '<div class="grid block menu">';
    foreach($value['sections'] as $section) {

        if ($i++%$footnote[$m] === 0) { 
            $bridge .= '</div><div class="grid block menu">';
            $m++;
        }
        $secname = $section['name'];
        $dishcount = count($section['items']); 

        $bridge .= '<h3>'. $secname .' '.$footnote[0].'</h3>';

         $i++;  
    } //end section foreach
$bridge .= '</div>';

未经测试的代码,如果需要任何更改,请告诉我,以便我可以适当地更新答案。

// Calculate section breaks
$sections = [ 2, 1, 5];
$sectionBreaks = [];
$sum = 0;
foreach ($sections as $section) {
    $sum += $section;
    $sectionBreaks[] = $sum;
}
// Add the items to each section
$results = [];
$result = '';
$i = 0;
foreach ($items as $item) {
    if (array_search($i, $sectionBreaks) !== false) {
        $results[] = $result;
        $result = '';
    }
    $result .= '<h3>' . $item . '</h3>';
}
// Collapse it all together
$finalResult = '<div>' . implode('</div><div>', $results) . '</div>';

这是循环遍历数据以实现您最初公开的示例的方法。 foreachfor。这行得通,但除非你给我们一些数据来处理,否则我将无法对其进行调整。

$bridge='';
foreach($value['sections'] as $section) {
    $bridge .= '<div class="grid block menu" number="'.$section.'"><h3>MY TITLE!! '. $section['name'] .'</h3>';     
    for ($x = 0; $x <= $section; $x++) {
        $bridge .= "Here goes the content; Item $x<br>";
    }
    $bridge .= '</div>';
}
echo $bridge;

希望对您有所帮助:)

我认为您遇到的问题出在代码的 if($i++%...) 部分。

不是递增 $i 并检查模块化表达式的结果,而是检查 $i == $footnote[$m] 是否成功,然后在成功时将 $i 重置回 0。

我在本地稍微修改了你的脚本,试试这个:

$i = $m = 0;

$bridge .= '<div class="grid block menu">';

foreach($value['sections'] as $section)
{
    if ($i == $footnote[$m])
    { 
        $bridge .= '</div><div class="grid block menu">';
        $m++;
        $i = 0;
    }
    $secname = $section['name'];
    $dishcount = count($section['items']);

    $bridge .= '<h3>'. $secname .' '.$footnote[$m].'</h3>';

    $i++;
}

$bridge .= '</div>';

这样,您实际上是在遍历每个脚注,而不仅仅是检查它是否可以被指定的数字整除。