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

时间:2014-07-07 04:27:02

标签: 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

2 个答案:

答案 0 :(得分:1)

尝试改变:

...
$data[$key] = $row;

...
$data[][$key] = $row;

答案 1 :(得分:1)

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

您要做的是创建一个辅助数组作为[ 'NM1' => ['...', '...'], 'PR1' => ['...', '...'] ] 值,并将节点推送到该数组中,这样就可以得到预期的结果。

while (($row = fgetcsv($handle, 1000, ";", "\"", "\n")) !== FALSE) {
    $key = array_shift($row);
    // Check if the key exists if not create a new secondary array
    if (!isset($data[$key])) $data[$key] = array();
    // Notice the extra []
    $data[$key][] = $row;
}

代码是,

{{1}}

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