2011-12-14 46 views
0
$specs = array ('Name' => 'Cleopatra', 'Year' => '2008', 'Length' => '20ft', 'Make' => 'manufacturer', 'Model' => 'model', 'Engines Count' => '2', 'Fuel' => 'Diesel', 'Rudder' => 'rudder', 'Keel' => 'keel', 'Price' => '$1'); 

foreach ($specs as $label => $detail) { 
    echo "<tr>"; 
    echo "<th>{$label}</th>"; 
    echo "<td>{$detail}</td>"; 
    echo "</tr>"; 
} 

foreach循環在每行中返回1列。我怎樣才能使每行4列,像這樣計數數組項並在特定數字後添加div

<tr> 
     <th>Label</th> 
     <td>Detail</td> 
     <th>Label</th> 
     <td>Detail</td> 
     <th>Label</th> 
     <td>Detail</td> 
     <th>Label</th> 
     <td>Detail</td> 
    </tr> 
    <tr> 
     <th>Label</th> 
     <td>Detail</td> 
     <th>Label</th> 
     <td>Detail</td> 
     <th>Label</th> 
     <td>Detail</td> 
     <th>Label</th> 
     <td>Detail</td> 
    </tr> 
+3

每列4行?或每列的列?你的例子是每行的列。 – Jon 2011-12-14 20:15:22

+0

編輯。感謝您的注意 – CyberJunkie 2011-12-14 20:17:22

回答

5

只需添加計數器,像這樣:

echo "<tr>"; 
foreach ($specs as $label => $detail) { 
    if($i%4 == 0 && $i != 0) { 
    echo "</tr>"; 
    echo "<tr>"; 
    } 
    echo "<th>{$label}</th>"; 
    echo "<td>{$detail}</td>"; 
    $i++; 
} 
echo "</tr>"; 

更新:修正邊緣情況$i=0<tr>的向右順序

1

套裝一個計數器,並且每4次迭代打印一個新的<tr>

$i = 0; 
echo '<tr>'; 
foreach ($specs as $label => $detail) { 
    if($i !== 0 && $i%4 === 0){ 
    echo '</tr><tr>'; 
    } 
    echo "<th>{$label}</th>"; 
    echo "<td>{$detail}</td>"; 
    $i++; 
} 
echo '</tr>'; 
1

如果你從學校還記得你的數學,你可以使用mod operator得到除法運算的餘數。這是你需要得到你想要的。

echo "<tr>"; 
foreach ($specs as $label => $detail) 
{ 
    $counter++; 
    //get remainder of division by 4, when 1 create new row 
if ($counter % 4 == 1) 
{ 
    echo "</tr>"; 
    echo "<tr>"; 
} 
echo "<th>{$label}</th>"; 
echo "<td>{$detail}</td>"; 


} 
echo "</tr>"; 
1

這承載了您的索引是基於零的假設。

首先我們定義每行所需的列數。然後,我們定義兩個規則集:何時開始新行和何時結束行。

我們希望在第一次迭代時開始一個新行,並且任何時候當前迭代計數都可以被我們在每一行中需要的列數整除。

我們想在最後一次迭代時結束一行。當我們不在第一次迭代時,我們也會結束一行,並且集合的總數減去當前的迭代次數可以被我們希望在每一行中減去一列的列數整除。

$cols_in_row = 5; 
foreach ($array as $i => $item) 
{ 
    if ($i == 0 || $i % $cols_in_row == 0) 
    { 
     echo '<tr>'; 
    } 

    echo '<td>'.$item.'</td>'; 

    if ($i + 1 == count($array) || ($i != 0 && count($array) - $i % ($cols_in_row - 1))) 
    { 
     echo '</tr>'; 
    } 
} 

此方法允許您只寫一次開啓和關閉標籤,以便編輯者不會認爲您忘記打開或關閉某些東西。