如何在代码中维护文件读取指针,点火器php视图之间来回


How to maintain the file reading pointer in code igniter php back and forth between the view?

我有一个代码点火器控制器读取上传的记录文件(excel, csv, tsv, xml等),并将每一行作为记录写入数据库。作为文件第一列的记录ID应该是唯一的。如果它已经存在于数据库中,那么在读取文件时,我应该抛出一个警报,并根据用户的响应,我将覆盖或跳过该记录并继续处理其他记录。

但是,一旦我抛出警报并到达视图,我就失去了对控制器的控制,我不知道要保持文件指针的滴答声,以便在收到用户的响应后继续读取。

是否有解决这个问题的方法,或者我们是否有其他替代方法?

假设我有一个这样的文件:

Roll, Name, Age, Subject
1, Praveen, 25, Cloud Computing
2, Sri Ram, 25, Cloud Computing
3, Dhiwa, 23, Computer Science
4, Vennila, 25, Cloud Computing
5, Arun, 22, Computer Science

作为一个CSV文件,我将使用PHP的内置函数str_getcsv来读取它,如下所示:

$csv = array_map('str_getcsv', file('data.csv'));

我将通过解析数组的第一个值来获取记录Roll的集合,这是一个唯一条目的集合,因此我将得到如下内容:

Array (
  1,
  2,
  3,
  4,
  5
)

最后我假设数据库已经有一个类似的结构,如:

+--------+------+-----+---------+
| UserId | Name | Age | Subject |
+--------+------+-----+---------+

因此,现在我将使用SQL的GROUP_CONCAT函数将所有UserId组合在一起,并获得如下方式:

$UserIdsFromDB = get_first_row_value("SELECT GROUP_CONCAT(`UserId`) FROM `Users`");

我将得到解析它作为一个数组,并有$UserIdsFromDB这样的结果:

Array (
  5,
  17,
  22,
  23,
  55,
  56
  57
)

我可以很容易地使用PHP的内置函数array_intersect来查找那些重复的值,这给了我:

Array (
  5
)

和使用一个简单的AJAX调用,我会问我是否需要替换5用户或所有的用户,这样:

get_user_name(5)                  // Gets the name of the user with ID 5.
count($Array_Intersect_Result)    // Gets the number of matching users.

我希望这能使你达到一定程度的理解。