如何增加foreach循环内的数字?

时间:2017-07-25 23:43:39

标签: php foreach increment

我想从数据库中获取一些数据并以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>";
}

它没有用,我也不知道它有什么问题。

5 个答案:

答案 0 :(得分:3)

不要将$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++; } 添加到值中:

position: relative

答案 1 :(得分:3)

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

如果你想要一个看起来更漂亮的代码,你可以这样做:

<!-- 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;

答案 2 :(得分:0)

你只需要逃避你的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 ++是PHP增量,所以需要对其进行解析。

所以完整的代码看起来像这样:

{{1}}

按预期测试并正常工作。这里的概念证明: https://3v4l.org/mUqZ1

答案 3 :(得分:0)

通常情况下,当我投票将问题视为重复时,我不会发布答案,但有几个机会可以教育这个难以在评论中描述的问题。

至关重要的是,如果要在回声线中增加,++$i之前。如果++位于$i之后,那么$i的初始值就会回显,然后会发生增量。

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

代码:(Demo

$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++)的速度更快结果是一样的。 What's the difference between ++$i and $i++ in PHP?

答案 4 :(得分:-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>";
      i++;
   }