php - 防止数组覆盖,而是创建新的数组索引

标签 php mysql arrays

我有一个文件,我需要将文件的内容保存在我的 MySQL 数据库中。这是我用来解析文件的代码:

$lines = file($tmp_filename);
$data = array();
if (($handle = fopen($tmp_filename, 'r')) !== FALSE)
{
  while (($row = fgetcsv($handle, 1000, ";", "\"", "\n")) !== FALSE)
    {
      $key = array_shift($row);
      $data[$key] = $row;
    }
  fclose($handle);
}

下面是我正在解析的文件的内容:

HDR;Payroll Interface;5496;2012-07-20
NM1;082;IN2;12345678;2001-01-15;Mr;Marcial;Gustav;Gustav,Marcial;PRI;Marcial
PR1;082;IN2;12345678;7 The School;Alvarez;Bahaghari; ;Gandum
PR2;082;IN2;12345678;400006;IND;M;M;2007-10-16;1976-03-31
PR3;082;IN2;12345678; ; ;A;
**truncated**

Click Here for full data

有这样的场景,数组有相同的索引和相同的值,但我仍然需要保存这些数据,但发生了数组覆盖。必须添加什么才能将相同的数组放入不同的数组索引?

Take a look at this and tell me what i am missing

最佳答案

数组中的数据正在被覆盖,因为每次遇到它时您都在重新分配 $key 的值。

您想要做的是创建一个辅助数组作为 $key 值并将节点插入该数组,这样您最终会得到预期的结果。

[
    'NM1' => ['...', '...'],
    'PR1' => ['...', '...']
]

代码是,

while (($row = fgetcsv($handle, 1000, ";", "\"", "\n")) !== FALSE) {
    $key = array_shift($row);
    // Notice the extra []
    $data[$key][] = $row;
}

每个键现在将包含一个数组,其中遇到的每一行都有一个节点。

关于php - 防止数组覆盖,而是创建新的数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24603042/

相关文章:

php - 计算大于 20 的值的数量

php - 保护客户端处理的数据库 key

mysql - org.springframework.dao.InvalidDataAccessResourceUsageException : could not extract ResultSet;

php - 如何使用 AJAX 或类似工具编辑 MySQL 内联查询的结果?

php - Mysql使用IN搜索包含每个IN子句单词的条目

arrays - 如果选中相同的复选框,如何循环两个数组并进行比较 Angular 2

c - 结构中数组和结构数组的动态内存分配

php - 在mysql中获取带或不带撇号的字符串

php - 删除文件扩展名的正确方法

java - 测验程序中数组索引越界异常