PHP函数返回多个JSON对象

时间:2018-04-03 14:00:01

标签: php arrays json

我有一个目前看起来像这样的PHP函数

function renderJson(PageArray $items) {
$myData = array();
$myData['title'] = [];
$myData['url'] = [];

// cycle through all the items
foreach($items as $item) {

    array_push($myData["title"],$item->title);
    array_push($myData["url"],$item->url);


}

return json_encode($myData);
}

它目前在此形状中用作输出

{"title":["A","B"],"url":["A","B"]}

但这正是我想要实现的目标

{"title":["A"],"url":["A"]},{"title":["B"],"url":["B"]}

我试图将其作为JSON编码返回。$ item-> title和$ item-> url返回一个字符串。任何帮助都会很棒。

3 个答案:

答案 0 :(得分:2)

现在你明白了:

{"title":["A","B"],"url":["A","B"]}

但你想要这个:

{"title":["A"],"url":["A"]},{"title":["B"],"url":["B"]}

你想要的是添加一个新的"项目"每次循环,每个项目都有一个标题和一个网址。现在你返回一个包含2个子数组的数组:一个用于标题,一个用于url。

尝试这种方式:

function renderJson(PageArray $items) {
    // Your result array
    $myData = array();

    // cycle through all the items
    foreach($items as $item) {

        // Each time you loop, you add a new array in your main array with a title and an URL
        $myData[] = array(
            "title" => $item->title,
            "url"   => $item->url
        );
    }

    return json_encode($myData);
}

我使用了[]因为他做了你需要的东西:在主阵列的末尾推送元素。这是使用array_push()的简短方法。以下是有关详细信息的文档:http://php.net/manual/en/function.array-push.php

输出将是:

[{"title":["A"],"url":["A"]},{"title":["B"],"url":["B"]}]

答案 1 :(得分:1)

您想要返回的内容当然不是有效的json。此时返回一个包含这两个对象的数组(即将整个$item推送到$myData

function renderJson(PageArray $items) {
    $myData = array();

    // cycle through all the items
    foreach($items as $item) {
        array_push($myData,['title' => $item->title, 'url' => $item->url]);
    }

    return json_encode($myData);
}

的形式为您提供了一些东西
[{"title":"A","url":"A"},{"title":"B","url":"B"}]

答案 2 :(得分:0)

您可以通过逗号连接JSON来创建无效的JSON。要么让你的客户端(说json数据的接收者)用逗号分割结果,然后自己解析每个JSON。

否则你可以创建一个“大”的JSON字符串,包含你的JSON数据(或者如果有更多的话)。

只需在PHP中创建一个数组,为每个JSON数据添加一个新元素,然后在json_encode()中添加它,然后通过客户端循环遍历它。

你最终会使用什么,并不重要,但我会在第一种方法中使用第二种方法,因为它更清洁。