Foreach和专栏

时间:2012-01-19 20:22:22

标签: php html foreach

<?php
$arr = range(1,rand(40,120)); ?>

<table>

<?php
foreach ($arr as &$value) {
    echo '<tr><td>' . $value . '</td></tr>';
} ?>

</table>

这为我生成了例如:

1
2
3
...
111

全部在一列中。我怎么做 - 当第一列是25行然后创建新列,等等。例如:

1   26  51
2   27  ...
3
..
25  50

我怎么做到的? 我可以使用DIV而不是表格。

3 个答案:

答案 0 :(得分:1)

垂直排序的那种列(没有双关语)是html中的一个严重问题,因为这个arragement是&#34; top-&gt; bottom,left-&gt; right&#34 ;,而HTML表格由他们自然是&#34; left-&gt; right,top-&gt; bottom&#34;代替。

要绕过它,你必须对数组索引进行一些偏移数学运算,这样你就可以按行输出:

$arr = range(1,rand(40,120));
$rows = ceil(count($arr) / 3); // assuming 3 columns
for ($i = 0; $i < $rows; $i++) {
    echo <<<EOL
<tr>
   <td>{$arr[$i]}</td>    1, 2, 3, etc...
   <td>{$arr[$i+rows]}</td>  11, 12, 13, etc...
   <td>{$arr[$i+(2*$rows)]}</td> 21, 22, 23, etc...
</tr>
EOL;
}

这段代码可能不会按原样运作,但应该给你基本的想法。

答案 1 :(得分:1)

<强> EDITED

<?php

$rows = 25;
$arr = range(1, rand(40, 120));
$arr = array_merge($arr, array_fill(0, $rows - (count($arr) % $rows), null));
$cols = ceil(count($arr) / $rows);
$render = array();

echo '<table>' . "\n";
foreach ($arr as $i => $value) {
  $render[$i % $rows][] = $value;
  if (count($render[$i % $rows]) == $cols) {
    echo '  <tr>' . "\n" . '    <td>' . implode('</td>' . "\n" . '    <td>', $render[$i % $rows]) . '</td>' . "\n" . '  </tr>' . "\n";
  }
}
echo '</table>' . "\n";

?>

答案 2 :(得分:1)

<?php      
$arr = range(1,rand(40,120)); 
?>      

<div style="width:40px; float:left;">      

<?php      
foreach ($arr as $value) {      
    echo $value . '<br />';  
        if ($value % 25 == 0) {
            echo '</div><div style="width:40px; float:left;">';
        }
    } 
?>