PHP-注意未定义的偏移量

PHP-注意未定义的偏移量,php,arrays,offset,Php,Arrays,Offset,我的php脚本中有一个我不理解的问题。我知道关于这个问题有几个问题,但没有一个适合我的问题 实际上,我有一个输入文件,由名为testfile.txt的表格分隔 有了这个txt文件,我创建了一个名为result.txt的新文件,在其中获取第0列和第7列中testfile的内容 当我执行php脚本时,出现以下错误: 注意:未定义的偏移量:7 我不明白的是,我的result.txt是用我的testfile.txt中的列0和7中包含的数据创建的。如果我这样做: echo $dataFromTestFil

我的php脚本中有一个我不理解的问题。我知道关于这个问题有几个问题,但没有一个适合我的问题

实际上,我有一个输入文件,由名为
testfile.txt的表格分隔

有了这个txt文件,我创建了一个名为result.txt的新文件,在其中获取第0列和第7列中testfile的内容

当我执行php脚本时,出现以下错误:

注意:未定义的偏移量:7

我不明白的是,我的
result.txt
是用我的
testfile.txt
中的列0和7中包含的数据创建的。如果我这样做:

echo $dataFromTestFile[7];
我在第7列中输入了输出内容

所以我真的不明白为什么我有这个通知,以及如何删除它

以下是我的php脚本:

<?php
if (false !== ($ih = fopen('/opt/lampp/htdocs/ngs/tmp/testfile.txt', 'r'))) {
    $oh = fopen('/opt/lampp/htdocs/ngs/tmp/result.txt', 'w');

    while (false !== ($dataFromTestFile = fgetcsv($ih,0,"\t"))) {
        // this is where I build my new row
        $outputData = array($dataFromTestFile[0], $dataFromTestFile[7]);
        fputcsv($oh, $outputData);
        //echo $dataFromTestFile[7];
    }

    fclose($ih);
    fclose($oh);
}
?>

确保testfile.txt中存在第7列-我猜从零开始时可能是第6列-也可以

var_dump($dataFromTestFile) 变量转储($dataFromTestFile)
为了获取变量的内容-数组键和值可能是您感兴趣的问题

我怀疑这是导致错误的原因:

$outputData = array($dataFromTestFile[0], $dataFromTestFile[7]);
您试图在特定索引处使用数组元素,而不检查它们是否确实存在

另外,您正在尝试将数组对象写入结果文件,是否要在该文件中创建逗号分隔的值

试试这个:

$source = '/opt/lampp/htdocs/ngs/tmp/testfile.txt';
$result = '/opt/lampp/htdocs/ngs/tmp/result.txt';

if (($handle = fopen($source, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
        if (isset($data[0]) && isset($data[7])) {
            file_put_contents($result, $data[0] .','. $data[7] ."\r\n");
        }
    }
    fclose($handle);
}

或者,您也可以将结果写入csv,如下所示:

$sourceFile = '/opt/lampp/htdocs/ngs/tmp/testfile.txt';
$resultFile = '/opt/lampp/htdocs/ngs/tmp/result.txt';
$resultData = array();

// Parse source file
if (($handle = fopen($sourceFile, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
        if (isset($data[0]) && isset($data[7])) {
            $resultData[] = array($data[0], $data[7]);
        }
    }
    fclose($handle);
}

// Write result file
if (sizeof($resultData)) {
    $h = @fopen($resultFile, 'w');
    if (!$h) {
        exit('Failed to open result file for writing.');
    }
    foreach ($resultData as $resultRow) {
        fputcsv($h, $resultRow, ',', '"');
    }
    fclose($h);
}

var\u dump($dataFromTestFile)
在本通知前一行。最有可能的情况是,不管出于什么原因,一个特定行(或两个或三个)实际上没有7列
您可以检查
array\u key\u是否存在(7,$dataFromTestFile)
,如果为false,则使用一些默认值(即0)而不是
$dataFromTestFile[7]
,或者不将行写入输出。如果您不包含testfile.txt中的一些示例数据,人们如何帮助您?感谢您的脚本。实际上,您的第一个脚本只将输入文件的一行存储到my result.txt文件中。您的第二个脚本工作得很好,不再
注意未定义的偏移量:7
。又是萨克斯。啊,对第一个剧本感到抱歉。那是个小错误<代码>文件内容将在每次迭代中覆盖文件。别理它。
$sourceFile = '/opt/lampp/htdocs/ngs/tmp/testfile.txt';
$resultFile = '/opt/lampp/htdocs/ngs/tmp/result.txt';
$resultData = array();

// Parse source file
if (($handle = fopen($sourceFile, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
        if (isset($data[0]) && isset($data[7])) {
            $resultData[] = array($data[0], $data[7]);
        }
    }
    fclose($handle);
}

// Write result file
if (sizeof($resultData)) {
    $h = @fopen($resultFile, 'w');
    if (!$h) {
        exit('Failed to open result file for writing.');
    }
    foreach ($resultData as $resultRow) {
        fputcsv($h, $resultRow, ',', '"');
    }
    fclose($h);
}