【问题标题】:is this valid json array using php这是使用 php 的有效 json 数组吗
【发布时间】:2010-03-30 01:26:04
【问题描述】:

我需要转换一些其他人完成的代码,以便在我的 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 语法,我不太确定。

如果我知道有些事情也在做他们应该做的事情并给出正确的输出,这可以节省我一些时间。

谢谢,理查德

【问题讨论】:

  • EOD 只是 HEREDOC(或 NOWDOC)语法,不是吗?
  • 类似的东西,但我不是很喜欢我仍然需要阅读那个 php 手册页

标签: php syntax json


【解决方案1】:

这称为heredoc。它就像里面的所有文本都是一个字符串一样工作。如果您尝试生成 JSON,请不要使用它。取而代之的是,该语句在遇到分号之前不会执行:

$somevar = {
  "s": "1",
  "f": "{$to}",
  "m": "{$messagesan}"
};

【讨论】:

  • 谢谢,并在最后一个结束卷曲后添加最后一个逗号,你忘记了。但是我是否也在使用正确的方式来输出项目。我 json_encode 添加直卷曲 [] 本身,还是我必须这样做?
  • 您在答案中写的是一个对象,对吧?但是 ajax 函数需要一个项目数组。这是正确的 "items"=>$items 还是我需要做 "items"=>array($items)?????
  • 通常你会创建一个包含线性数组和关联数组的结构,然后调用json_encode() 将其一次全部转换为JSON。是否需要调用array()取决于你想要什么结构。
  • 哦,该死的,我明白你的意思了,如果我已经在会话数组中包含现成的对象,我就不能以这种方式使用 json_encode。我必须重新考虑一下情况。
  • 如果我保持语法 $output = 这是否正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多