我有以下文本作为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),
)
我该怎么做?
答案 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>";