计算数组项并在特定数字后添加div

时间:2011-12-14 20:14:14

标签: php arrays loops foreach

$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列

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

4 个答案:

答案 0 :(得分: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 :(得分: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>';

答案 2 :(得分: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>"; 

答案 3 :(得分: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>';
    }
}

此方法允许您只编写一次开始和结束标记,以便编辑不会认为您忘记打开或关闭某些内容。