在php中正确的json之前删除null数组

时间:2017-07-28 17:45:14

标签: php arrays json

我想在后端以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);

2 个答案:

答案 0 :(得分:0)

使用array_filter

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。