【问题标题】:php text file to array of arraysphp文本文件到数组数组
【发布时间】: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
        ))

【问题讨论】:

    标签: php arrays split arrayofarrays


    【解决方案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 代码中的问题...
        猜你喜欢
        • 2021-05-08
        • 2014-10-30
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-27
        • 1970-01-01
        相关资源
        最近更新 更多