2015-09-13 62 views
2

也許是一個簡單的問題,在這裏。 我有一個簡單的PHP foreach腳本,輸出結果很好。我需要用每個第二項的容器div來包裝結果。例如可以是:將div.container包裹在foreach中

看起來什麼腳本像

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database'); 
$i = 0; 
foreach ($result as $date): 
    $i++; 
    echo '<div class="range" data-range="'. $date->id .'">'; 
    echo 'test'; 
    echo '</div>'; 
endforeach; 

將輸出:

<div class="range" data-range="00000000"></div> 
<div class="range" data-range="00000000"></div> 
<div class="range" data-range="00000000"></div> 
<div class="range" data-range="00000000"></div> 
<div class="range" data-range="00000000"></div> 
<div class="range" data-range="00000000"></div> 

,但我需要下面的例子:一個div容器周圍範圍爲包每秒的結果。就像這樣:

<div class="container"> 
<div class="range" data-range="00000000"></div> 
<div class="range" data-range="00000000"></div> 
</div> 
<div class="container"> 
<div class="range" data-range="00000000"></div> 
<div class="range" data-range="00000000"></div> 
</div> 
<div class="container"> 
<div class="range" data-range="00000000"></div> 
<div class="range" data-range="00000000"></div> 
</div> 

我嘗試:

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database'); 
$i = 0; 
foreach ($result as $date): 
    $i++; 
    if($i%2 == 0) { 
    echo $i > 0 ? "</div>" : ""; 
    echo "<div class='container'>"; 
    } 
    echo '<div class="range" data-range="'. $date->id .'">'; 
    echo 'test'; 
    echo '</div>'; 
endforeach; 

但是,這不會與我在尋找:) 想法,結果正常工作? =)

回答

2

該段應輸出的第一個div#之前得到你什麼,你需要

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database'); 
$i = 0; 
foreach ($result as $date): 
    $i++; 
    if($i%2 == 1) { 
     echo '<div class="container">'; 
    } 
    echo '<div class="range" data-range="'. $date->id .'"></div>'; 
    if($i%2 == 0) { 
     echo '</div>'; 
    } 
endforeach; 
+0

沒有。抱歉。它將它全部包裝在一個容器中,不像想要的結果:) 以上將輸出:

simon

+0

對不起我的錯誤。我搞砸了我自己的代碼 - 它的工作。感謝百萬:) – simon

+0

@simond歡迎您 – Fabio

1

你真的很接近。 :)

您希望您的容器在foreach循環之外回顯。

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database'); 
$i = 0; 
echo '<div class="container">'; 
foreach ($result as $date): 
    $i++; 
    echo '<div class="range" data-range="'. $date->id .'">'; 
    echo 'test'; 
    echo '</div>'; 
endforeach; 
echo '</div>'; 

編輯:對不起,我誤解了你的問題,但仍然很簡單。

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database'); 
$i = 0; 
foreach ($result as $date): 
    $i++; 
    if($i%2 == 1) { 
    echo "<div class='container'>"; 
    } 
    echo '<div class="range" data-range="'. $date->id .'">'; 
    echo 'test'; 
    echo '</div>'; 
    if($i%2 == 0) { 
    echo "</div>"; 
    } 
endforeach; 

編輯2:哇,它真的不是那麼簡單。如果有奇數個結果,則不會關閉最後一個標記。所以,你真的想這:

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database'); 
$i = 0; 
foreach ($result as $date): 
    if($i%2 == 0) { 
    echo "<div class='container'>"; 
    } 
    echo '<div class="range" data-range="'. $date->id .'">'; 
    echo 'test'; 
    echo '</div>'; 
    if($i%2 == 1) { 
    echo "</div>"; 
    } 
    $i++; 
endforeach; 
if($result->Size() % 2 == 1) 
{ 
    echo '</div>'; 
} 
+0

雖然他應該檢查是否(空($結果)!)容器......而且他仍然需要在那裏進行模數測試,輸出一個帶有結束標籤的新div#容器。 – markdwhite

+0

我誤解了這個問題。哎呀!謝謝:) – srazum

+0

這將把所有的範圍類放在一個容器中:/ :) – simon

1
<?php 
define ('TEMPLATE_SUB_CONTAINER', '<div class="range" data-range="%s">%s</div>'); 
define ('TEMPLATE_CONTAINER',  '<div class="container">%s</div>'); 

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database'); 
$i  = 0 ; 
$buffer = ''; 

foreach ($result as $date): 
    if ($i == 2) { 
     flushBuffer($buffer); 
     $buffer = ''; 
     $i=0; 
    } 
    $buffer .= sprintf(TEMPLATE_SUB_CONTAINER . '<br />', $date->id, 'test'); 
    $i++; 
endforeach; 
flushBuffer($buffer); 

function flushBuffer($buffer) { 
    if (strlen($buffer) > 0) { 
     $buffer .= spintf(TEMPLATE_CONTAINER, $buffer); 
     printf("%s", $buffer); 
    } 
}