使用PHP将文本文件转换为数组

时间:2014-07-23 08:57:32

标签: php explode

我有一个文本文件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,而且还很新,所以我甚至不知道我从哪里开始是一个好地方。我的直觉是将先前的输出写入新的文本文件,然后创建另一个类似于第一个但基于选项卡爆炸的代码块,这次。

帮助?

4 个答案:

答案 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>";
?>

结果将是一个锯齿状的数组:

enter image description here

您需要清理第一个和最后一个元素。

答案 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));