PHP中如何按行而非按列打印CSV前3列并实现行点击跳转
PHP中如何按行而非按列打印CSV前3列并实现行点击跳转
看起来你已经离目标很近啦!目前的问题出在跳转链接里传递的是列索引($i),而不是当前行的编号,所以点击时才会出现“按列跳转”的问题。咱们只需要加一个行计数器,就能轻松解决这个问题,同时保留只显示前3列的逻辑。
修正后的代码
<?php $libraryData = fopen("../data/libraryData.csv", "r"); // 初始化行计数器,用来标记当前是第几行 $rowNum = 0; echo '<div class="container" id="table_container">'; echo '<table class="table table-sm table-responsive table-bordered table-striped pd-0" id="csvTable">'; while (($data = fgetcsv($libraryData, 1000, ",")) !== FALSE) { echo '<tr>'; // 可选:如果CSV第一行是表头,不想让表头可跳转,可以跳过 // if ($rowNum === 0) { // for ($i = 0; $i < 3; $i++) { // echo '<td>' . htmlspecialchars($data[$i]) . '</td>'; // } // $rowNum++; // echo '</tr>'; // continue; // } for ($i = 0; $i < 3; $i++) { // 这里把$i换成$rowNum,传递当前行的编号到跳转页面 echo '<td><a href="display.php?row=' . $rowNum . '">' . htmlspecialchars($data[$i]) . '</a></td>'; } echo '</tr>'; $rowNum++; // 每处理完一行,计数器加1 } echo '</table>'; fclose($libraryData); ?>
关键修改点说明
- 新增了
$rowNum变量,用来记录当前处理的是CSV中的第几行,每循环完一行就自增1。 - 跳转链接里的参数从
$i(列索引)改成了$rowNum(行索引),这样点击任意列的链接,都会传递当前行的编号到display.php。 - 注释部分提供了处理表头的方案,如果你的CSV第一行是表头不需要跳转,可以取消注释这段代码。
关于display.php的补充提示
在display.php里,你可以通过$_GET['row']获取到点击的行号,然后重新读取CSV找到对应行的完整数据:
<?php $targetRow = (int)$_GET['row']; $libraryData = fopen("../data/libraryData.csv", "r"); $currentRow = 0; while (($data = fgetcsv($libraryData, 1000, ",")) !== FALSE) { if ($currentRow === $targetRow) { // 这里显示该行的完整信息,比如遍历输出所有列 foreach ($data as $column) { echo '<p>' . htmlspecialchars($column) . '</p>'; } break; } $currentRow++; } fclose($libraryData); ?>
备注:内容来源于stack exchange,提问作者Matt Baker
相关产品推荐
相关产品推荐

