2015-06-25 41 views
2

每個人都知道如何在foreach循環中每隔n次迭代輸出一次html。HTML每第n次迭代有扭曲 - 第n次使用數組值改變第n次

$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++; 
} 

我試圖做同樣的事情,但不是爲$我已知值,我是從一個陣列拉動值一樣

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>'; 
+0

節數組的名稱是什麼?每個項目的準確數據是什麼? – Luke

+0

它被註釋爲$ footnote,因此在模數中使用$ footnote [$ m]。 – f8xmulder

回答

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

這樣,你實際上是通過每個腳註迭代只是檢查,看它是否是由指定的數整除代替。

+0

輝煌。而一個簡單的兩行代碼更改爲啓動。謝謝! – f8xmulder

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>'; 
+0

感謝您的輸入!我認爲我選擇的答案在利用我原來的代碼實現正確輸出方面做得稍微好一點(我只需要更改兩行)。我沒有測試過你的,但它在另一種情況下肯定會有用。 – f8xmulder

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; 

我希望它能幫助:)