繁体   English   中英

格式化json编码,就像在laravel php上一样

[英]Format the json encode just like on laravel php

假设我有一个查询,该查询从某条推文获取图像

[
     {
         "pic": "/upload/15680712995mb.jpg",
        "tweet_id": "48"
     },
     {
         "pic": "/upload/1568071299test.PNG",
         "tweet_id": "48"
     },
     {
         "pic": "/upload/1568015310test.PNG",
         "tweet_id": "47"
     } 
]

我也从查询中获得了所有推文的结果

[
    {
        "id": "48",
        "tweet": "test",
    },
    {
        "id": "47",
        "tweet": "test tweet",
    },

    {
        "id": "45",
        "tweet": "test tweet 3",
    }
]

我该如何格式化结果(就像在laravel上一样)

[
    {
        "id": "48",
        "tweet": "test",
        "pics": [
            [
                "/upload/15680712995mb.jpg"
            ],
            [
               "/upload/1568071299test.PNG"
            ],
        ]
    },
    {
        "id": "47",
        "tweet": "test tweet",
        "pics" : [
            [
                 "/upload/1568015310test.PNG"
            ]
        ]
    },
    {
        "id": "45",
        "tweet": "test tweet 3",
        "pics" : []
    }
]

这是我的简化代码

public function getTweets()
{
    $pics =  $this->model->getPics();

    $aTweets =  $this->model->getTweets();
    $map = [];
    $props = [];
    foreach ($aTweets as $sTweet) {
        $map['id'] =  $sTweet['id'];
        $map['tweet'] =  $sTweet['tweet'];

        foreach ($pics as $pic) {
            if ($pic['id'] === $sTweet['tweet_id']) {
                $map['pics'] = [$pic['pic']];
            }
        }

        $props[] = $map;

    }
    return $props;
}

但这只是给我以下输出

{
    "id": "48",
    "tweet": "test",
    "pics": [
        "/upload/1568015310test.PNG"
    ]
},
{
    "id": "47",
    "tweet": "test tweet",
    "pics": [
        "/upload/1568015310test.PNG"
    ]
},

知道如何格式化结果。 提前致谢。?

我不确定是什么困扰着您,但是为了在其中添加多个值,只需像在注释部分中所讲的那样放置另一个嵌套即可:

$map['pics'][] = $pic['pic'];
        //   ^

因此要完成答案:

$map = [];
$props = [];
foreach ($aTweets as $sTweet) {
    $map['id'] =  $sTweet['id'];
    $map['tweet'] =  $sTweet['tweet'];
    $map['pics'] = []; // initialize
    foreach ($pics as $pic) {
        if ($pic['tweet_id'] === $sTweet['id']) {
            $map['pics'][] = [$pic['pic']];
        }
    }

    $props[] = $map;
}

本质上,这为pics索引创建了另一个维,作为数组并不断推送,只要它们具有相同的ID。

旁注: tweet_id用于图片,id用于aTweets 您有另一种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM