0

我有一个文本文件,其中包含

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
        ))

4

5 回答 5

3

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

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

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

$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
        )

)
于 2020-01-06T11:09:17.963 回答
0

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

$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);
于 2020-01-06T11:18:18.243 回答
0

有几个错误。

首先 - 初始化$arrayvar as$array = [];和 not $array[] = null;

其次,您可以使用fgetcsv会更好。

最后,我认为分隔符是(white space) 而不是\t.

考虑:

$handle = fopen($file, "r");
while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) {
    $arr[] = $data;
}
于 2020-01-06T11:12:54.323 回答
0
$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);
于 2020-01-06T11:30:13.603 回答
0

试试这样。

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

希望这对您有所帮助。

于 2020-01-06T11:06:24.913 回答