我的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的示例数据:
Input Errors AccNo Genesymbol Variant Reference Coding Descr. Coding
aaa ddd fdfd dfdf fefefd ref1 fdfdfd fdfdf dfdfde
答案 0 :(得分:0)
确保第7列存在于testfile.txt中 - 我猜从0开始时它可能是第6列 - 也可以
var_dump($dataFromTestFile)
为了获取变量的内容 - 数组键和值可能对您的问题感兴趣
答案 1 :(得分:0)
我怀疑这是造成错误的一行:
$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);
}