PHP json_encode token_get_all - PullRequest
       11

PHP json_encode token_get_all

0 голосов
/ 15 февраля 2012

Я хочу вернуть функцию 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"
}

Я попытался поместить функцию token_get_all () напрямую через функцию json_encode () , а также поиграть с различными массивами, и результаты не те, которые я хотел.

Это последнее воплощение кода:

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));


}

Спасибо,

Ryan

1 Ответ

2 голосов
/ 15 февраля 2012

Я думаю, что вы действительно хотите сделать, это создать список словарей.Для этого вы должны предпочесть обычное добавление массива вместо 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"}
]
...