Explode contents of a txt file into array

微笑、不失礼 提交于 2019-12-05 16:20:25

You can use the following

$result = array();
$file = explode("-------------------", file_get_contents("cc/cc.txt"));
foreach ( $file as $content ) {
    $result[] = array_filter(array_map("trim", explode("\n", $content)));
}
var_dump($result);

Output

array
  0 => 
    array
      0 => string '01Name 1' (length=8)
      1 => string '02whatever contents' (length=19)
      2 => string '03whatever contents' (length=19)
  1 => 
    array
      1 => string '01Name 2' (length=8)
      2 => string '02whatever contents' (length=19)
      3 => string '03whatever contents' (length=19)

You can take it further

$result = array();
$file = explode("-------------------", file_get_contents("cc/cc.txt"));
foreach ( $file as $content ) 
{
    foreach(array_filter(array_map("trim",explode("\n", $content))) as $line)
    {
        list($key,$value) = explode(" ", $line);
        $result[$key] = $value ;
    }
}
var_dump($result);

Output

array
  '01Name' => string '2' (length=1)
  '02whatever' => string 'contents' (length=8)
  '03whatever' => string 'contents' (length=8)

Firstly you should use file() to read and split up a file line-wise. That's a built-in specifically for that purpose.

Your check for "-------------------" fails because you didn't take the trailing linebreaks (\r\n etc.) into account. (Use FILE_IGNORE_NEW_LINES for the file() function as one solution). Though it might be better to use a regex here:

$lines = file($filename);
foreach ($lines as $line) {
    if (preg_match('/^\s*---------+\R*$/', $line)) { ... }
}

A bit redundant this way, but more resilient.

You might as well read the whole file with file_get_contents and split out text blocks with preg_split instead.

If your file is consistently formatted, having three lines per block of data, you could simply parse it that way. Here I am creating a 2-dimensional array of the whole file:

<?php

header("Content-type:text/plain");
$file = fopen("cc.txt", "r");

$alldata = array();
$index = 0;
while (!feof($file))
{
    $alldata[$index]['name'] = fgets($file);
    $alldata[$index]['c1'] = fgets($file);
    $alldata[$index]['c2'] = fgets($file);
    fgets($file); // throw away delimiter line
    $index++;
}
fclose($file);  

print_r($alldata);
?>

This outputs:

Array
(
    [0] => Array
        (
            [name] => 01Name 1 
            [c1] => 02whatever contents
            [c2] => 03whatever contents
        )
    [1] => Array
        (
            [name] => 01Name 2
            [c1] => 02whatever contents
            [c2] => 03whatever contents
        )
)
$c      = file_get_contents($file);
$lines  = explode("-------------------", $c);
foreach ($lines as $l) {
    if (strpos($l, 'keyword') !== false) {
        echo $l;
        die();
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!