PHP json_encode token_get_all

时间:2012-02-15 18:44:36

标签: php json tokenize

我想将PHP token_get_all()函数作为JSON返回。

我还希望token_get_all通过token_name()函数传递令牌以获取其名称。

我尝试了各种不同的方法,但都没有产生我需要的结果。

我想在JavaScript中使用这些信息,我希望能够调用tokens.tokenName作为例子。

我想我需要类似下面的例子:

{

 "tokenName":"T_COMMENT","tokenValue":"# some comment","tokenLine":"1"
 "tokenName":"T_VARIABLE","tokenValue":"$some_variable","tokenLine":"2"
}

我试图直接通过json_encode()函数放置token_get_all()函数,以及使用各种数组,结果不是我想要的。

这是代码的最新版本:

if (isset($_POST['code']) || (isset($_GET['code']))) {

    if (isset($_POST['code'])) {
        $code = $_POST['code'];
    } elseif (isset($_GET['code'])) {
        $code = $_GET['code'];
    }

    $tokens = array();
    $tokenName = array();
    $tokenValue = array();
    $tokenLine = array();

    foreach(token_get_all($code) as $c) {

        if(is_array($c)) {
            array_push($tokenName, token_name($c[0])); // token name
            array_push($tokenValue, $c[1]); // token value
            array_push($tokenLine, $c[2]); // token line number

        } else {
            array_push($tokenValue, $c); // single token, no value or line number
        }

    }

    // put our token into the tokens array
    array_push($tokens, $tokenName);
    array_push($tokens, $tokenValue);
    array_push($tokens, $tokenLine);

    // return our tokens array JSON encoded
    echo(json_encode($tokens));


}

谢谢,

赖安

1 个答案:

答案 0 :(得分:2)

我想你真正想要做的是生成一个词典列表。为此,您应该更喜欢普通数组追加而不是array_push

foreach(token_get_all($code) as $c) {

    $tokens[] =
        array(
            "tokenName" => token_name($c[0]),
            "tokenValue" => $c[1],
            "tokenLine" => $c[2]
        );

}

保存一些临时变量,更易于阅读。它会给你一个结果,如:

[    
   {"tokenName":"T_COMMENT","tokenValue":"# some comment","tokenLine":"1"},
   {"tokenName":"T_VARIABLE","tokenValue":"$some_variable","tokenLine":"2"}
]