我想从数据库中获取一些数据并以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>";
}
它不起作用,我不知道出了什么问题。
不要在想要回声的地方写
$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++;
}
字符串插值的基本版本忽略 ++ 运算符,因为它只知道简单变量 - 请参阅字符串解析
如果你想要更漂亮的代码,你可以这样做:
<!-- 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;
通常,当我投票结束重复问题时,我不会发布答案,但有几个机会可以就这个问题进行教育,而这些机会很难仅用评论来描述。
如果您要增加回波线,则
++
位于 $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++ 有什么区别?你只需要逃离你的 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。
试试这个代码
$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>";
}