带有fgetcsv的PHP未定义偏移量
好吧,我在这个问题上花了好几个小时,我不知道发生了什么。我想我只是需要对这个问题有一个新的看法,特别是因为我已经起床超过24小时了,而这项工作的最后期限是5小时 当我尝试使用从CSV中提取的数据时,我会收到一个未定义的偏移量通知,每个偏移量为0到907。这可能意味着我没有成功地提取数据,但我已经筋疲力尽,希望得到一些帮助 有人知道我做错了什么吗带有fgetcsv的PHP未定义偏移量,php,csv,undefined,offset,fgetcsv,Php,Csv,Undefined,Offset,Fgetcsv,好吧,我在这个问题上花了好几个小时,我不知道发生了什么。我想我只是需要对这个问题有一个新的看法,特别是因为我已经起床超过24小时了,而这项工作的最后期限是5小时 当我尝试使用从CSV中提取的数据时,我会收到一个未定义的偏移量通知,每个偏移量为0到907。这可能意味着我没有成功地提取数据,但我已经筋疲力尽,希望得到一些帮助 有人知道我做错了什么吗 $lines = array(); $lines2 = ""; $one = array(); $two = array(); $three = ar
$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文件是一个标准的逗号分隔文件,因此我不认为有任何理由在此处发布该数据。该语句
while($lines = fgetcsv($fp)) {
将以数组的形式返回一行,其中包含行上的元素
因此,当您在CSV中的一行上迭代时,以下内容是错误的,需要删除
for ($k = 0, $m = count($lines) - 1; $k < $m; $k++) {
在此使用之后,例如,为调试打印\u 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]);
}
我得到了和你一样的解决方案。。。 事实上,它非常简单和可怕:fgetcsv在读取结束时添加一个带有一个空值的数组。因此,$line[1]将产生错误,因为最后添加的数组只有一个值 只需计算$line中的列数,如下所示:
/*
* 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++;
}
没有一个真正的错误信息,并要求尽快回答。。。“你可能会倒霉的。”马丁·霍恩伯格,我不认为他尽快写信是无礼的。他在传达他的紧急情况。都在错误信息中,它会给你一行代码。使用var_dump检查变量是否包含您期望的内容。查看我的答案-实现它,然后休息一下。即使是一两个小时。在筋疲力尽的时候编码会适得其反,而且速度很慢。你太棒了!非常感谢,我真不敢相信我花了多少时间在这上面,这只是一个简单的循环问题。这就是我从我的另一个项目中复制代码而没有仔细观察它的原因。
/*
* 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++;
}