我正在使用PHP将固定宽度的文本文件导入数据库。
我已经有了代码工作,但我想提高它的效率,因此相同的代码可以处理多个(不同的)固定宽度的文本文件。
这就是我现在所拥有的:
$file_handle = fopen('fixy.txt', 'r');
while ($line = fgets($file_handle)) {
$output[] = array(
'title' => trim(substr($line, 0, 50)),
'code' => trim(substr($line, 50, 5)),
'date' => trim(substr($line, 55, 8)),
'writer' => trim(substr($line, 63, 50))
);
}
fclose($file_handle);
$ output数组被传递给一个执行数据库插入的函数,并且可以正常工作。
我没有硬编码固定宽度文本文件的列,而是想使用一个包含所需信息的数组,所以我可以像这样循环:
$information['type1'] = array(
array('name' => 'title', 'position' => 0, 'length' => 50),
array('name' => 'code', 'position' => 50, 'length' => 5),
array('name' => 'date', 'position' => 55, 'length' => 8),
array('name' => 'writer', 'position' => 63, 'length' => 50)
);
//there will also be a type 2, 3 and so on...
$type = $information['type1'];
...
while ($line = fgets($file_handle)) {
...
$type['name'] => trim(substr($line, $type['position'], $type['length'])),...
...
}
基本上我想动态构建$ output数组!但是我无法正确地获得循环和/或数组,我可能正好盯着答案,但是我看不到它,已经花了几个小时的时间来处理它并且感谢任何帮助!
答案 0 :(得分:0)
$information['type1'] = array(
array('name' => 'title', 'position' => 0, 'length' => 50),
array('name' => 'code', 'position' => 50, 'length' => 5),
array('name' => 'date', 'position' => 55, 'length' => 8),
array('name' => 'writer', 'position' => 63, 'length' => 50)
);
$type = $information['type1'];
$file_handle = fopen('fixy.txt', 'r');
while ($line = fgets($file_handle))
{
$output[$type['name']] = trim(substr($line, $type['position'], $type['length']));
}
fclose($file_handle);