有没有办法可以确定foreach循环的最后一次迭代,并实现一些不同的代码?
我试图遍历数组并将其中的部分输出到表中。
以下是我的数组示例:
array(2) {
[0]=> array(3) {
[date]=> string(10) "2013-09-18"
[title]=> string(75) "Ready For Retina HD: Create Pixel-Perfect Assets For Multiple Scale Factors"
[filepath]=> string(74) "ready-for-retina-hd-create-pixel-perfect-assets-for-multiple-scale-factors"
}
[1]=> array(3) {
[date]=> string(10) "2010-10-20"
[title]=> string(40) "Taking A Closer Look At Tech Conferences"
[filepath]=> string(40) "taking-a-closer-look-at-tech-conferences"
}
}
对于每个部分,我想输出title
,然后我想在两个不同的地方输出filepath
作为链接(一次是"视图"链接另一个是"编辑"链接)。
我需要遍历数组并将这三个项目中的每一个都放到一个表格行中,所以我实现了一个计数器,每3个项目插入</tr><tr>
,以切断旧行并开始一个新的。
唯一的问题是最后一项是非常有效的,因为由于最后一个<tr>
如何对其进行重组以使其在最后一次计数时不会打开?
echo "<table border='2'><tbody><tr>";
foreach ($myarray as $post){
// Adds to count, outputs title
echo "<td>" . $post['title'] . "</td>";
$rowcounter++;
// Adds to count, outputs filepath with "view"
echo "<td><a href='../posts/post-" . $post['filepath'] . "'>View</a></td>";
$rowcounter++;
// Adds to count, outputs filepath with "edit"
echo "<td><a href='../posts/post-" . $post['filepath'] . "?edit=true'>Edit</a></td>";
$rowcounter++;
// Tests the count
echo 'rowcounter = ' . $rowcounter;
if ($rowcounter == "3"){
$rowcounter = 0;
echo "</tr><tr>";
}
}
echo "</tr></tbody></table>";
答案 0 :(得分:3)
仅在循环内渲染<tr>
,而不是分别在前后打开和关闭。
据我所知,你没有必要计算你的行数&#39; (顺便说一句是列)。你迭代每一行,所以你的每行标记应该在foreach
花括号之间:
echo "<table border='2'><tbody>";
foreach ($myarray as $post){ // One iteration per row
echo '<tr>'; // Row STARTS here.
echo "<td>" . $post['title'] . "</td>";
echo "<td><a href='../posts/post-" . $post['filepath'] . "'>View</a></td>";
echo "<td><a href='../posts/post-" . $post['filepath'] . "?edit=true'>Edit</a></td>";
echo '</tr>'; // Row ENDS here.
}
echo "</tbody></table>";
答案 1 :(得分:0)
我建议乔治的答案,但为了将来的参考,您可以选择使用for循环而不是foreach:
foreach ($i=0; $i < count($myarray); $i++){
$post = $myarray[$i];
...
然后检查$ i对$ myarray的数量
或者你可以在循环中添加一个行计数,在每次迭代时递增并对$ myarray中的行数进行检查