通过 php 将 mysql 导出为 excel 时在第一列中添加序列号

Adding serial number in first column while exporting mysql as excel via php

我正在使用以下 php 代码通过 php 脚本将 mysql 数据导出到 excel。

因为 mysql table 中的 Id 不是连续的,因为根据需要删除了一些行。

所以我想在第一列中为来自mysql的记录添加序列号。可以在下面的代码中添加什么来实现这一点?

感谢您的帮助。

我目前的代码如下:

<?php
include("db.php");

$file_name = "My-Records-" . date('d-F-Y-H-i-s') . ".xls";

function cleanData(&$str){
    $str = preg_replace("/\t/", "\t", $str);
    $str = preg_replace("/\r?\n/", "\n", $str);
     if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
function modify($str) {
    return ucwords(str_replace("_", " ", $str));
}

# Header information
header("Content-Disposition: attachment; filename=\"$file_name\"");
header("Content-Type: application/vnd.ms-excel");

$flag = false;
$result = $database->get_results("SELECT lname, fname, mobile, email, form_date FROM myTable") or die('Connection failed!');
foreach($result as $row){
    if(!$flag){
      // display field/column names as first row
       $old_states1 = array_keys($row);
       $old_states2 = array_map("modify", $old_states1);
       $states = implode("\t", $old_states2 ) . "\r\n";

       print $states;
      $flag = true;
    }
     array_walk($row, 'cleanData');
    print implode("\t",  array_values($row)) . "\r\n";
}
exit;
?>

稍微更改您的代码以获得您想要的内容:

// ...

// NEW CODE HERE
$row_index = 0;

foreach ($result as $row) {
    // NEW CODE HERE
    $row = array_merge(['id' => ++$row_index], $row);
       
    if (!$flag) {
       // display field/column names as first row
       $old_states1 = array_keys($row);
       $old_states2 = array_map("modify", $old_states1);
       $states = implode("\t", $old_states2 ) . "\r\n";

       print $states;
       $flag = true;
    }
    
    array_walk($row, 'cleanData');
    
    print implode("\t",  array_values($row)) . "\r\n";
}

Full demo code