将shell_exec()输出放入数组中

时间:2013-09-24 08:25:29

标签: php arrays

我有一行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
)

这让我感到困惑,因为我希望每个值都有一个索引号,但是其中三个值似乎没有索引。

所以我想我的问题是两部分

  1. 上面的输出中发生了什么
  2. 任何人都可以帮我找到一个看起来像这样的有用数组:

    阵列
    (     [0] => rtmpgw     [1] => 10089     [2] =>在/ usr / bin中/ VLC     [3] => 10107     [4] => SH     [5] => 10123     [6] => grep的     [7] => 10125 )

  3. 感谢〜

3 个答案:

答案 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];
}