【问题标题】:Use PHP to convert text file into array使用 PHP 将文本文件转换为数组
【发布时间】:2014-07-23 08:57:31
【问题描述】:

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

帮助?

【问题讨论】:

标签: php explode


【解决方案1】:

你可以像这样一次性处理这个文件:

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

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

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

【讨论】:

  • 我认为 $fopen = fopen($file, r);应该是这样 --> $fopen = fopen($file, 'r'); r 参数作为字符串,否则将引发警告。干得好。
【解决方案2】:

这是结构化数据,由制表符分隔。您可以use fgetcsv() 将该数据读入数组。有关示例,请参阅 PHP 文档。

【讨论】:

  • 另外,制表符分隔符是\t,所以fgetcsv的第三个参数放'\t'
  • 然而,原始文件中有换行符,所以它不是纯粹的制表符分隔的。你是说我应该将 fgetcsv() 应用于我的代码块的输出?
  • @Malignus 你在开玩笑吗?您是否尝试过打开 PHP 文档?好的,下一步 - 阅读它。
  • @feeela 这就是为什么尝试回答 OP 本可以通过五分钟研究自行解决的问题是个坏主意 :)
  • @GordonM 我愿意承认,在来到这里之前,我花了两个小时试图找到正确的方法来做到这一点。就像我说的,我是新手,我正在努力自学这一点。 PHP 手册不能在五分钟内阅读,并且导航到对您想要的最有用的精确函数并不容易。首先,我尝试纯粹通过制表符进行分隔,但我得到了不需要的行,因为换行符中断了数据。我会继续阅读,就像我一直一样。感谢您提供的帮助。
【解决方案3】:
<?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);
?>

【讨论】:

  • 稍微解释一下你的代码在做什么不会伤害任何人。
【解决方案4】:

还有另一个答案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));

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 2017-10-09
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多