2017-07-28 1 views
0

php配列をバックエンドでjson形式でエコーしたいと思います。しかし、印刷すると、phpの正しいjsonの前にヌル配列を削除します

[][][][][][][][][][][][][][][][][][][][][][][][][] 
[][][][][][][][][][][][][][][][][][][][][][][][][] 
[][][][][][][][][][][][][][][][][][][][][][][][][] 
[][][][ 
{ 
"USER":"root", 
"PID":"31692", 
"PPID":"31691", 
"ELAPSED":"00:05", 
"VSZ":"1072408", 
"%CPU":"6.2", 
"STATE":"S", 
"COMMAND":"\/opt\/iims_client\/utils\/nfstop --rpc --interval 60 --sample 2 --mount ALL\n" 
},{ 
"USER":"ctxsrvr", 
"PID":"29309", 
"PPID":"5152", 
"ELAPSED":"9-07:51:37", 
"VSZ":"605648", 
"%CPU":"0.3", 
"STATE":"S", 
"COMMAND":"\/opt\/Citrix\/VDA\/bin\/ctxgfx -session 87\n" 
}] 

が表示されます。「USER」の前にヌル配列は必要ありません。どうすれば削除できますか?ありがとう。ここに私のコードは次のとおりです。

elseif(preg_match("/<toptenproc>/",$line)){ 

     $line=fgets($file,1024); 
     $line=ltrim($line); 
     $header=preg_split('/\s+/',$line); 
     while(!((preg_match("/<\/toptenproc>/",$line)))){ 
      $line=fgets($file,1024); 
      $line=ltrim($line); 
      $vars=preg_split('/\s+/',$line,8); 
      // echo $vars[5]; 
      array_push($result, array($header[0] => $vars[0], $header[1] => $vars[1], $header[2] => $vars[2], $header[3] => $vars[3], $header[4] => $vars[4], $header[5] => $vars[5], $header[6] => $vars[6], $header[7] => $vars[7])); 
     } 

    // $result = (object) array_filter((array) $result); 
    echo json_encode($result); 
+0

コードのどこかに出力がある可能性はありますか?それらのヌルは、あなたが投稿したコードのどこから来てはいけません。 – RichGoldMD

+0

@RichGoldMD 'elseif'が実行されるたびに、配列が空であるか、json_encode経由で1つ以上のオブジェクトとともにエコーされます。あなたが '[] [] [] []'に戻る理由は、elseifがループ内で実行されたためです。私は彼が '$ result = array();'を繰り返し実行していると推測しています。whileループがコード内で失敗した場合、彼は '[]'をエコーし​​ています。 – Ultimater

+0

意味@Ultimater – RichGoldMD

答えて

0

</toptenproc>

ため<toptenproc>
あなたの2番目の正規表現のチェックのためにあなたの最初の正規表現のチェックは終了タグがない持っている場合まだ遭遇したことがあれば、ただ何もエコーしてはいけません。あなたの解決策は何かをエコーする前に、配列のサイズを確認するのと同じくらい簡単でなければなりません:

if(count($result)) 
{ 
    echo json_encode($result); 
} 

代替、あなたは、ループの前に
$whileLoopRan = false;を置くことができ、ループ内$whileLoopRan = true;を入れて、場合にのみ、ループエコープリフォーム走った。一部の人は$i++;を好きで、代わりに "i"を使用します。

ループが終了した後でも、あまりにも早くエコーして、elseifの外側で実行する必要があります。

XMLを解析しようとしている場合は、XMLパーザをregexpではなく使用する必要があります。

0

使用array_filter

array_filter($array); // it will remove null at the first depth

関連する問題