抓取foreach循环的最后一次迭代(最后一次迭代需要不同)

时间:2014-10-20 15:41:18

标签: php arrays foreach

有没有办法可以确定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>";

2 个答案:

答案 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中的行数进行检查