我有一行php:
$output = shell_exec('ps aux | grep 9902 | awk \'{print $11" "$2}\'');
print $output;
将提供输出:
rtmpgw 10089
/usr/bin/vlc 10107
sh 10123
grep 10125
我尝试使用下一行将上面的输出放入数组中。
$oparray = explode(" ", trim($output));
它有效但不如预期。 print_r($oparray);
将提供以下输出:
Array
(
[0] => rtmpgw
[1] => 10089
/usr/bin/vlc
[2] => 10107
sh
[3] => 10123
grep
[4] => 10125
)
这让我感到困惑,因为我希望每个值都有一个索引号,但是其中三个值似乎没有索引。
所以我想我的问题是两部分
任何人都可以帮我找到一个看起来像这样的有用数组:
阵列
(
[0] => rtmpgw
[1] => 10089
[2] =>在/ usr / bin中/ VLC
[3] => 10107
[4] => SH
[5] => 10123
[6] => grep的
[7] => 10125
)
感谢〜
答案 0 :(得分:9)
shell_exec
输出中的行由end-of-line
符号分隔 - 并且与正常空格不同,这就是为什么explode
没有考虑它的原因。
您可以使用preg_split,\s
字符类匹配正常空格和EOL。
$oparray = preg_split('/\s+/', trim($output));
答案 1 :(得分:7)
试试这个:
<?php
$text = 'rtmpgw 10089
/usr/bin/vlc 10107
sh 10123
grep 10125';
$oparray = preg_split("#[\r\n]+#", $text);
print_r($oparray);
?>
Array ( [0] => rtmpgw 10089 [1] => /usr/bin/vlc 10107 [2] => sh 10123 [3] => grep 10125 )
答案 2 :(得分:1)
$array = array();
foreach(preg_split("/((\r?\n)|(\r\n?))/", $subject) as $line){
$oparray = explode(" ", trim($line));
$array[] = $oparray[0];
$array[] = $oparray[1];
}