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

时间:2015-06-25 01:10:05

标签: php arrays foreach iteration

每个人都知道如何在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>';

3 个答案:

答案 0 :(得分:0)

未经测试的代码,如果需要进行任何更改,请告知我们,以便我能够更新答案。

// 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>';

答案 1 :(得分:0)

这是循环数据的方法,以便首先实现您公开的示例。 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;

我希望它有所帮助:)

答案 2 :(得分:0)

我认为您遇到的问题出在代码的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>';

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