PHP foreach与表行

时间:2013-02-12 15:28:41

标签: php foreach

我这里有这个PHP脚本

$z = range(2, 123);
echo '<table width="100%">';
foreach($z as $x){

echo '<td><a href="http://www.mysite.net/' . $x . '/"><img src="http://www.mysite.net/' . $x . '/5.jpg" width=200></a></td>';
}

echo '</table>';

我想要做的是在表格行中获得6个项目,然后是新行...我该怎么做?

谢谢, Ĵ

6 个答案:

答案 0 :(得分:2)

此处modulo operator进来。您可以划分并计算余数。每当余数为0时,您都会添加一个新行:

$z = range(2, 123);
echo '<table width="100%">';
echo '<tr>';
$cnt = 2;
foreach($z as $x){
if ( ($cnt - 2) % 6 == 0 ) {
echo '</tr><tr>';
}
$cnt++;
echo '<td><a href="http://www.mysite.net/' . $x . '/"><img src="http://www.mysite.net/' . $x . '/5.jpg" width=200></a></td>';
}
echo '</tr>';
echo '</table>';

答案 1 :(得分:2)

如果您希望代码干净整洁,请始终将数据操作与演示代码分开。因此,尽可能多地从输出中移出逻辑 所以,首先准备你的数据

<?
$data = range(2, 123);
$data = array_chunk($data, 6);
?>

然后输出

<table width="100%">
<? foreach($data as $chunk): ?>
  <tr>
<? foreach($chunk as $val): ?>
    <td>
      <a href="/<?=$val?>/"><img src="/<?=$val?>/5.jpg" width=200></a>
    </td>
<? endforeach ?>
  </tr>
<? endforeach ?>
</table>

答案 2 :(得分:1)

尝试这样的事情:

$z = range(2, 123);
echo '<table width="100%"><tr>';
foreach($z as $x){

    if( ($x - 2) % 6 == 0 ) // Minus 2 because you don't start at 0 but at 2.
    {
        echo '</tr><tr>';
    }
    echo '<td><a href="http://www.mysite.net/' . $x . '/"><img src="http://www.mysite.net/' . $x . '/5.jpg" width=200></a></td>';
}

echo '</tr></table>';

%是一个名为modulo的Math函数。可以找到更多信息here

答案 3 :(得分:0)

使用计数器变量。

$z = range(2, 123);

$current_result=0;

echo '<table width="100%">';
echo '<tr>';
foreach($z as $x){
if ($current_result++ % 6 == 0) echo '</tr><tr>';

echo '<td><a href="http://www.mysite.net/' . $x . '/"><img src="http://www.mysite.net/' . $x . '/5.jpg" width=200></a></td>';
}
echo '</tr>';
echo '</table>';`

答案 4 :(得分:0)

嗯,一开始range(2, 123)会产生122个数字,所以你想要的是range(1, 6)

然后,您需要修复脚本以将每个表格单元格括在一个行元素中,以便您的脚本变为:

$z = range(1, 6);
echo '<table width="100%">';

foreach($z as $x){
  echo '<tr><td><a href="http://www.mysite.net/' . $x . '/"><img src="http://www.mysite.net/' . $x . '/5.jpg" width=200></a></td></tr>';
}

echo '</table>';

Range是循环6次的一种奇怪的方式 - 你可能只想使用一个字符串来构建表并使用while循环,然后输出整个表一次性。

修改
似乎我可能错过了一点 - 如果你试图在范围内循环6次,那么模数方法就是你想要的,虽然我仍然需要关于表行元素的观点,否则你就不会生成有效的HTML。 / p>

答案 5 :(得分:0)

只需使用任何变量来计算内部循环。增加它并检查你的价值。 例如

$cnt++;
if ($cnt >= 6) {
  $cnt = 0;
  echo "</tr><tr>";
}

不要使用foreach。用于2到123