php文本文件到数组数组

Posted

技术标签:

【中文标题】php文本文件到数组数组【英文标题】:php text file to array of arrays 【发布时间】:2020-01-06 11:01:52 【问题描述】:

我得到了一个包含

的文本文件
a b c 

a c

b

我想读取文本文件并将其转换为这样的数组数组

  array(
        array('a', 'b', 'c'),
        array('a', 'c'),
        array('b'));

我想拆分数组中的每一行以及数组中索引中的每个单词

我试过这段代码,但它只分割数组中的每一行我想要一行数组中的每个单词

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

我得到了这个结果

Array

(

    [0] => 

    [1] => Array
        (
            [0] => a b c
        )

    [2] => Array
        (
            [0] => a b
        )

    [3] => Array
        (
            [0] => c
        ))

【问题讨论】:

【参考方案1】:

您可以通过使用一些内置函数大大减少代码。

使用带有适当标志的file() 将读取文件,忽略任何空行并返回数据数组。

然后使用array_map()explode() 处理这个数组并将其拆分为每行的各个部分...

$fileName = "140724.txt";
$file = file($fileName, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
$output = array_map(function($line)  return explode("\t", $line); , $file);

会产生

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

    [1] => Array
        (
            [0] => a
            [1] => c
        )

    [2] => Array
        (
            [0] => b
        )

)

【讨论】:

【参考方案2】:

这样试试。

$file="140724.txt";
$fopen = fopen($file, r);
$fread = fread($fopen,filesize($file));
fclose($fopen);
$remove = "\n";
$split = explode($remove, $fread);
$array = array();
$tab = " ";
foreach ($split as $string)

    $array[] = explode($tab, $string);

echo "<pre>";
print_r($array);
echo "</pre>";

希望对您有所帮助。

【讨论】:

此代码可能有效,但不能解释 OP 代码中的问题...【参考方案3】:

有几个错误。

首先 - 将 $array 变量初始化为 $array = []; 而不是 $array[] = null;

其次,你可以使用fgetcsv,这样会更好。

最后,我认为分隔符是(空格)而不是\t

考虑:

$handle = fopen($file, "r");
while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) 
    $arr[] = $data;

【讨论】:

【参考方案4】:
$fileData = file('1.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$result = [];
foreach ($fileData as $row) 
    $splitRow = str_getcsv($row, ' ');
    $result[] = $splitRow;


echo '<pre>';
print_r($result);
$fileData = file('1.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$result = array_map(function ($row) 
    return str_getcsv($row, ' ');
, $fileData);

echo '<pre>';
print_r($result);

【讨论】:

请在您的代码中添加一些解释,以便其他人可以从中学习【参考方案5】:

这将在没有空白数组的情况下提供完美的输出。稍后谢谢。

$file="140724.txt";
$fopen = fopen($file, 'r');
$fread = fread($fopen,filesize($file));
fclose($fopen);
$remove = "\n";
$split = explode($remove, $fread);

$custom_array = array();
$x = 0;
foreach ($split as $value) 
    $value = trim($value);
    if($value != '' || $value != null)
        $inside_explode = explode(" ", $value);
        $custom_array[$x] = $inside_explode;
        $x++;
    



print_r($custom_array);

【讨论】:

此代码可能有效,但不能解释 OP 代码中的问题...

以上是关于php文本文件到数组数组的主要内容,如果未能解决你的问题,请参考以下文章

php怎么将对象或者数组写入一个文本文件

php将数组元素按行写入文本文件

mysql数据生成PHP数组文件

php 在文本日志文件中格式化数组和对象等输出

php 保存数组到文件 var_exportserialize

Java:文本文件到二维数组