如何在foreach循环中增加一个数字?

问题描述 投票:0回答:5

我想从数据库中获取一些数据并以HTML表格的形式显示。

我希望表格的第一列显示行数,如 1,2,3,4...

这是我的 foreach 循环

$i=0;    
foreach($sql as $sql)    
{
    echo "<tr>";
        echo "<td>$i++</td>";
        echo "<td>$sql->jobseeker_name</td>";
        echo "<td>$sql->jobseeker_phone</td>";
        echo "<td>$sql->login_email</td>";
    echo "</tr>";
}

它不起作用,我不知道出了什么问题。

php foreach increment
5个回答
3
投票

不要在想要回声的地方写

$i++
。首先回显它,然后在循环结束时添加
$i++
以增加值:

<?php    

$i = 1;    

foreach ($sql as $sql) {
    echo "<tr>";
    echo "<td>$i</td>";
    echo "<td>$sql->jobseeker_name</td>";
    echo "<td>$sql->jobseeker_phone</td>";
    echo "<td>$sql->login_email</td>";
    echo "</tr>";

    $i++;
}

3
投票

字符串插值的基本版本忽略 ++ 运算符,因为它只知道简单变量 - 请参阅字符串解析

如果你想要更漂亮的代码,你可以这样做:

<!-- language: lang-php -->
<?php    

$i = 1;    
foreach($sql as $sql): ?>

   <tr>
     <td><?= $i++ ?></td>
     <td><?= $sql->jobseeker_name ?></td>
     <td><?= $sql->jobseeker_phone ?></td>
     <td><?= $sql->login_email ?></td>
   </tr>
<?php endforeach;

1
投票

通常,当我投票结束重复问题时,我不会发布答案,但有几个机会可以就这个问题进行教育,而这些机会很难仅用评论来描述。

如果您要增加回波线,则

++
位于
$i
之前,这一点至关重要。如果
++
$i
之后,则回显
$i
的初始值,然后发生增量。

假设我的结果集结构正确,这就是我编写代码片段的方式:

代码:(演示

$sql=[
    (object)['jobseeker_name'=>'A','jobseeker_phone'=>'B','login_email'=>'C'],
    (object)['jobseeker_name'=>'D','jobseeker_phone'=>'E','login_email'=>'F'],
    (object)['jobseeker_name'=>'G','jobseeker_phone'=>'H','login_email'=>'I']
];
foreach($sql as $i=>$row){
    echo "<tr>";
        echo "<td>",++$i,"</td>";
        echo "<td>$row->jobseeker_name</td>";
        echo "<td>$row->jobseeker_phone</td>";
        echo "<td>$row->login_email</td>";
    echo "</tr>";
}

输出:

<tr>
    <td>1</td>
    <td>A</td>
    <td>B</td>
    <td>C</td>
</tr>
<tr>
    <td>2</td>
    <td>D</td>
    <td>E</td>
    <td>F</td>
</tr>
<tr>
    <td>3</td>
    <td>G</td>
    <td>H</td>
    <td>I</td>
</tr>

此外,作为最佳实践:

  • 使用新的变量名称来区分

    $sql
    对象数组的每一行。如果您使用
    foreach($sql as $sql){
    那么如果您需要再次访问
    $sql
    ,您将只能访问
    $sql
    最后迭代的子数组,这是因为 foreach 循环不断覆盖输入数组。

  • 使用逗号而不是点来连接 echo。这是一种纳米优化,但养成习惯并没有什么坏处。

  • 此外,作为纳米优化的问题,在结果相同的所有情况下,使用“预增量”(

    ++$i
    ) 比“后增量”(
    $i++
    ) 更快。 PHP 中的 ++$i 和 $i++ 有什么区别?


0
投票

你只需要逃离你的 i++

echo "<td>".$i++."</td>";

因为 $i++ 是一个 PHP 增量,所以需要对其进行解析。

所以完整的代码如下所示:

<?php    
$i=1;    
        foreach($sql as $sql)    
        {
         echo "<tr>";
         echo "<td>".$i++."</td>";
         echo "<td>$sql->jobseeker_name</td>";
         echo "<td>$sql->jobseeker_phone</td>";
         echo "<td>$sql->login_email</td>";
         echo "</tr>";
        }
?>

经过测试并按预期工作。概念证明在这里: https://3v4l.org/mUqZ1


-2
投票

试试这个代码

   $i=0;    
   foreach($sql as $sql){
      echo "<tr>";
      echo "<td>++$i</td>";
      echo "<td>$sql->jobseeker_name</td>";
      echo "<td>$sql->jobseeker_phone</td>";
      echo "<td>$sql->login_email</td>";
      echo "</tr>";
   }
© www.soinside.com 2019 - 2024. All rights reserved.