это допустимый массив JSON с использованием PHP - PullRequest
1 голос
/ 30 марта 2010

Мне нужно преобразовать некоторый код, сделанный кем-то другим, для работы в моей модели MVC

Это использование некоторых функций, таких как EOD, которые я не понимаю. Это все еще работает в классе?

Первично, мой вопрос сосредоточен на выводе json.

Старый код не использует функцию php json_encode, но выводит ее напрямую, как это

?>
{
        "username": "<?php echo $_SESSION['username'];?>",
        "items": [
            <?php echo $items;?>
        ]
}

<?php

Я бы сделал это так, но я должен быть уверен, что это правильно для части предметов

header('Content-type: application/json'); 

$output = array("username"=> isset( $_SESSION['username'] ) ? $_SESSION['username'] : "?",
                "items"=>$items
                );
$this->content = json_encode($output);

Это некоторая предыстория того, как создаются $ items. Элемент хранится так:

$_SESSION['chatHistory'][$_POST['to']] .= <<<EOD
                       {
            "s": "1",
            "f": "{$to}",
            "m": "{$messagesan}"
       },
EOD;

и она помещается в переменную $ items следующим образом

$items = '';


if ( !empty($_SESSION['openChatBoxes'] ) ) {
        foreach ( $_SESSION['openChatBoxes'] as $chatbox => $void ) {
            $items .= $this->chatBoxSession($chatbox);
        }
    }

//The chatBoxSession() function takes an item from the  $_SESSION['chatHistory'] array and returns it.

Надеюсь, это было достаточно ясно? Руководство php предупреждает, что в некоторых случаях вы не получаете вывод массива, вместо этого вы получаете объект. Итак, с синтаксисом EOD я не совсем уверен.

Это могло бы сэкономить мне время, если бы я знал, что некоторые вещи делают то, что предполагали, и дают правильный вывод.

спасибо, Ричард

1 Ответ

1 голос
/ 30 марта 2010

Это называется heredoc . Это работает так, как будто весь текст внутри представляет собой одну строку. Не используйте его, если вы пытаетесь сгенерировать JSON. Вместо этого используйте тот факт, что утверждение не выполнено, пока не достигнет точки с запятой:

$somevar = {
  "s": "1",
  "f": "{$to}",
  "m": "{$messagesan}"
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...