如何将此文本拆分为列

时间:2016-01-13 17:51:20

标签: php

我有以下文本作为shell命令的输出。

c1     abc      def
c2     ghijk    lm
c30    a123     do390x
389    "a b c"  "my code" // spaced words

编辑:现在我们也有间隔词......

空格数是可变的(没有TAB)。 我想将此文本转换为2D数组。如下所示:

array(
   [0] => array(c1, abc, def),
   [1] => array(c2, ghijk, lm),
   [1] => array(c3, a123, do390x),
   [1] => array(389, a b c, my code),
)

我该怎么做?

3 个答案:

答案 0 :(得分:1)

这是一个聪明的近乎单行,应该做的工作:

$result = array_map(function($line) { 
    return preg_split('/\s+/', $line);
}, explode("\n", $text));

首先explode() $text分隔行,然后preg_split()分隔行。

答案 1 :(得分:0)

如果列中的内容有空格,您可能希望使用带有双重空格的preg_split。

preg_split('/\s\s+/', $line);

答案 2 :(得分:0)

试试这个(例如我从.txt得到结果):

$file = fopen("tmp/inputfile.txt", "r");
$all = array();

while (!feof($file)) {
   $all[] = fgets($file);
}

fclose($file);

$result = array();
foreach ($all as $value) {

    $line = trim(preg_replace('/\s\s+/', ' ', $value));
    $lineArray = explode(' ', $line);

    array_push($result, $lineArray);
}

echo "<pre>";
var_dump($result);
echo "</pre>";