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>';
这是循环遍历数据以实现您最初公开的示例的方法。 foreach
和 for
。这行得通,但除非你给我们一些数据来处理,否则我将无法对其进行调整。
$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>';
这样,您实际上是在遍历每个脚注,而不仅仅是检查它是否可以被指定的数字整除。
每个人都知道如何在 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>';
这是循环遍历数据以实现您最初公开的示例的方法。 foreach
和 for
。这行得通,但除非你给我们一些数据来处理,否则我将无法对其进行调整。
$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>';
这样,您实际上是在遍历每个脚注,而不仅仅是检查它是否可以被指定的数字整除。