好的,我已经花了几个小时来解决这个问题,我不确定发生了什么。我想我只是需要对这个问题有一个全新的看法,特别是因为我已经超过24小时,而且截止日期是五个小时。
当我尝试使用从CSV中提取的数据时,我收到每个偏移量(0到907)的未定义偏移通知。 (这可能意味着我没有成功地提取数据,但我很累,并希望得到一些帮助)
有谁知道我做错了什么?
$lines = array();
$lines2 = "";
$one = array();
$two = array();
$three = array();
$four = array();
$five = array();
$six = array();
$header = "";
$footer = "";
$countLines = 0;
/*
* Open the file and store its data into an array
*/
$fp = fopen('db.csv','r') or die("can't open file");
while($lines = fgetcsv($fp)) {
for ($k = 0, $m = count($lines) - 1; $k < $m; $k++) {
$one[$k] = $lines[0];
$two[$k] = $lines[1];
$three[$k] = $lines[2];
$four[$k] = $lines[3];
$five[$k] = $lines[4];
$six[$k] = $lines[5];
}
$countLines++;
}
fclose($fp) or die("can't close file");
/*
* Set up file header
*/
$header = "Header"
;
/*
* Set up file footer
*/
$footer = "Footer";
/*
* Prepare data for export
*/
for ($i = 0, $j = $countLines - 1; $i < $j; $i++) {
$lines2 .= $one[$i] ." ".
$two[$i] ." ".
str_pad($three[$i], 3) ." ".
str_pad($four[$i], 30) ." ".
str_pad($five[$i], 30) ." ".
str_pad($six[$i], 30) ."\r\n";
}
/*
* Store data in file
*/
$fp = fopen('db2.csv', 'w') or die("can't open file");
fwrite($fp, $header);
fwrite($fp, $lines2);
fwrite($fp, $footer);
fclose($fp) or die("can't close file");
CSV文件是标准的逗号分隔文件,因此我认为没有理由在此处发布该数据。
答案 0 :(得分:0)
声明
while($lines = fgetcsv($fp)) {
fgetcsv将以包含行上元素的数组形式返回单行;
因此,以下是错误的,需要在迭代CSV
中的单行时将其删除 for ($k = 0, $m = count($lines) - 1; $k < $m; $k++) {
所以,经过修订后,阅读循环应该(我认为)是这样的:
$fp = fopen('db.csv','r') or die("can't open file");
$k=0;
while($lines = fgetcsv($fp)) {
$one[$k] = $lines[0];
$two[$k] = $lines[1];
$three[$k] = $lines[2];
$four[$k] = $lines[3];
$five[$k] = $lines[4];
$six[$k] = $lines[5];
$k++;
$countLines++;
}
使用后,例如print_r($ one)用于调试以查看数组。
要输出它,我在很大程度上依赖于你想要实现的猜测,因为你输出的是db2.csv,但没有逗号(单独)。但是尝试类似下面的内容
/*
* Store data in file
*/
$fp = fopen('db2.csv', 'w') or die("can't open file");
fwrite($fp, $header);
/*
* Data for export
*/
for ($i = 0, $j = $countLines - 1; $i < $j; $i++) {
fprintf($fp, "%s %s %-3s %-30s %-30s %-30s\r\n", /* possibly add commas here? */
$one[$i], $two[$i], $three[$i],$four[$i], $five[$i], $six[$i]);
}
答案 1 :(得分:0)
我得到同样的一个,并寻找解决方案,因为你......
实际上它非常简单和恶作剧:fgetcsv()
在读数结束时添加一个NULL
值的数组。因此,$lines[1]
将产生错误,因为最后添加的数组只有一个值。
只需计算$ lines中的列数,如下所示:
/*
* Open the file and store its data into an array
*/
$fp = fopen('db.csv','r') or die("can't open file");
while($lines = fgetcsv($fp)) {
if ( count($lines) == 6 )
{
for ($k = 0, $m = count($lines) - 1; $k < $m; $k++) {
$one[$k] = $lines[0];
$two[$k] = $lines[1];
$three[$k] = $lines[2];
$four[$k] = $lines[3];
$five[$k] = $lines[4];
$six[$k] = $lines[5];
}
}
$countLines++;
}