2

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

谢谢~

4

3 回答 3

10

输出中的行shell_exec由符号分隔end-of-line- 这与普通空格不同,这就是为什么explode不考虑它的原因。

您可以改用preg_split\s字符类匹配普通空格EOL。

$oparray = preg_split('/\s+/', trim($output));
于 2013-09-24T08:29:39.083 回答
9

尝试这个:

<?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
)
于 2013-09-24T08:32:33.260 回答
1
$array = array();
foreach(preg_split("/((\r?\n)|(\r\n?))/", $subject) as $line){
    $oparray = explode(" ", trim($line));
    $array[] = $oparray[0];
    $array[] = $oparray[1];
} 
于 2013-09-24T08:30:27.173 回答