2012-02-15 81 views
0

我想返回PHP token_get_all()函數作爲JSON。PHP json_encode token_get_all

我也希望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)); 


} 

謝謝

瑞安

回答

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"} 
] 
+0

謝謝你,這似乎很好。 :) – ethicalhack3r 2012-02-16 11:19:59