我正在尝试运行此代码:
$file = fopen($txtFile, "r");
while(!feof($file)) {
$line = fgets($file);
$pieces = explode(",", $line);
$date = $pieces[0];
$open = $pieces[1];
$high = $pieces[2];
$low = $pieces[3];
$close = $pieces[4];
$volume = $pieces[5];
}
我收到了这个通知:
未定义的偏移:1中...
未定义的偏移量:2英寸...
未定义的偏移量:3英寸...
未定义的偏移:4英寸...
未定义的偏移量:5英寸......
为什么?
答案 0 :(得分:2)
正如斯蒂芬所说,看起来这个阵列并不像你期望的那样,你可以做一些事情。
尝试使用
var_dump($pieces)
并查看数组实际包含的内容。 您可以采取的另一项措施是防止错误并在代码中更具防御性,如下所示:
$file = fopen($txtFile, "r");
while(!feof($file)) {
$line = fgets($file);
$pieces = explode(",", $line);
if(isset($pieces[0]))
$date = $pieces[0];
if(isset($pieces[1]))
$open = $pieces[1];
if(isset($pieces[2]))
$high = $pieces[2];
if(isset($pieces[3]))
$low = $pieces[3];
if(isset($pieces[4]))
$close = $pieces[4];
if(isset($pieces[5]))
$volume = $pieces[5];
}
}
或者在这种情况下你可以检查$ pieces的长度,这可能会更好更短,如下所示:
$file = fopen($txtFile, "r");
while(!feof($file)) {
$line = fgets($file);
$pieces = explode(",", $line);
if(sizeof($pieces) != 6){
//handle this case here
}
else
{
$date = $pieces[0];
$open = $pieces[1];
$high = $pieces[2];
$low = $pieces[3];
$close = $pieces[4];
$volume = $pieces[5];
}
}
这只是确保在尝试对它们执行任何操作之前存在变量,并且将避免未定义索引的问题。
答案 1 :(得分:0)
我假设您的文件格式如下:
日期,开放,高,低,关闭,体积
日期,开放,高,低,关闭,体积
我认为问题在于您的文件格式不正确。
调试问题的一种方法是var_dump($ pieces);
另外我想你忘了通过调用fclose($ file);
来关闭文件句柄这是一个更简单的OOP解决方案:
$file = new SplFileObject( '/home/jason/file.csv', 'r' );
$file->setFlags( SplFileObject::READ_CSV );
foreach ( $file as $lineNumber => $line ) {
var_dump( $line ); // $line is an array
}
有关详情,请参阅http://www.php.net/manual/en/class.splfileobject.php
希望这会有所帮助:)