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
)

各値のインデックス番号を期待するので、これは私を混乱させますが、3 つの値にはインデックスがないように見えます。

ここでの私の質問は2つの部分であると思います

  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ため、 はそれを考慮していません。

通常の空白と EOL の両方に一致する文字クラスを使用して、代わりにpreg_splitを使用できます。\s

$oparray = preg_split('/\s+/', trim($output));
于 2013-09-24T08:29:39.083 に答える
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 に答える