我想在后端以json格式回显php数组。但是当我打印它时,显示
[][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][
{
"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”之前的null数组,所以如何删除它们呢?谢谢。这是我的代码:
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 :(得分:0)
array_filter($array); // it will remove null at the first depth
答案 1 :(得分:0)
您的第一个正则表达式检查<toptenproc>
您的第二个正则表达式检查</toptenproc>
如果还没有遇到结束标记,你根本就不应该回应任何东西。您的解决方案应该像在回显任何内容之前检查数组大小一样简单:
if(count($result))
{
echo json_encode($result);
}
或者,您可以在循环前加上$whileLoopRan = false;
,
然后在循环中放入$whileLoopRan = true;
并仅在循环运行时预先形成回声。有些人喜欢$i++;
然后使用“i”代替,无论你的船是什么漂浮。
这也有可能,你太早回应,应该在elseif之外做,只有在循环结束后才能完成。
如果您正在尝试解析XML,那么您应该使用XML解析器,而不是regexp。