我有一个文本文件here,我需要将其转换为行以从中提取第二,第三,第四和第五个值。
每行的前7个值以制表符分隔,然后有换行符,然后最后三个值以制表符分隔。
我删除了中断换行符,以便每行完全以制表符分隔。
<?php
$file="140724.txt";
$fopen = fopen($file, "r");
$fread = fread($fopen,filesize("$file"));
fclose($fopen);
$remove = "\n";
split = explode($remove, $fread);
foreach ($split as $string)
{
echo "$string<br><br>";
}
?>
产生this。
我不确定从这一点开始的进展。我自学了PHP,而且还很新,所以我甚至不知道我从哪里开始是一个好地方。我的直觉是将先前的输出写入新的文本文件,然后创建另一个类似于第一个但基于选项卡爆炸的代码块,这次。
帮助?
答案 0 :(得分:9)
您可以像这样一次处理此文件:
<?php
$file="140724.txt";
$fopen = fopen($file, r);
$fread = fread($fopen,filesize($file));
fclose($fopen);
$remove = "\n";
$split = explode($remove, $fread);
$array[] = null;
$tab = "\t";
foreach ($split as $string)
{
$row = explode($tab, $string);
array_push($array,$row);
}
echo "<pre>";
print_r($array);
echo "</pre>";
?>
结果将是一个锯齿状的数组:
您需要清理第一个和最后一个元素。
答案 1 :(得分:1)
这是结构化数据,由制表符分隔。您可以use fgetcsv()
将该数据读入数组。有关示例,请参阅PHP文档。
答案 2 :(得分:0)
<?php
$myfile = fopen("test.txt", "r") or die("Unable to open file!");
// Output one line until end-of-file
while(!feof($myfile)) {
$text[] = fgets($myfile);
}
fclose($myfile);
print_r($text);
?>
答案 3 :(得分:0)
还有另一个答案here,它将文件/原始字符串转换为关联数组。在这种情况下确实非常方便。
function tab_to_array($src='', $delimiter=',', $is_file = true)
{
if($is_file && (!file_exists($src) || !is_readable($src)))
return FALSE;
$header = NULL;
$data = array();
if($is_file){
if (($handle = fopen($src, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
}
else{
$strArr = explode("\n",$src);
foreach($strArr as $dataRow){
if($row = explode($delimiter,$dataRow))
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
}
}
return $data;
}
/**
* Example for file
*/
print_r(tab_to_array('example.csv'));
/**
* Example for raw string
*/
$str = "name number
Lorem 11
ipsum 22";
print_r(tab_to_array($str, "\t", false));