【问题标题】:Returning JSON array rom database response (lumen php)返回 JSON 数组 rom 数据库响应(流明 php)
【发布时间】:2019-05-24 06:13:14
【问题描述】:

我正在尝试对从我的数据库中收到的响应进行排序,以返回一个不错的 JSON 数组,但我找不到如何做到这一点,所以我向你寻求帮助。

来自数据库的响应:

[{"stad":"\u00d6rebro","lokalnamn":"Allm\u00e4nrepan"}, 
{"stad":"Kumla","lokalnamn":"Rum 1"},{"stad":"Kumla","lokalnamn":"Rum 
2"}, 
{"stad":"Kumla","lokalnamn":"Rum 4"}, 
{"stad":"Karlstad","lokalnamn":"UNO"}, 
{"stad":"Karlstad","lokalnamn":"Replokal 231"}]

我希望它返回如下内容:

[
"\u00d6rebro":{"Allm\u00e4nrepan"},
"kumla":{"Rum 1","Rum 2","rum 4"},
"Karlstad":{"uno","replokal 231"}
]

希望你明白,

已尝试在数组上调用 response->json(),但没有成功,我无法在网上找到任何进一步的信息,因为我不确定要搜索什么

【问题讨论】:

  • 能否以正确的格式发布 JSON 格式
  • 上面看起来像丑陋但有效的 JSON,@rs007。你到底想改变什么?
  • @TOBE 我的帖子是回复你还是你使用不同的格式?

标签: php arrays json lumen


【解决方案1】:

您可以按照以下步骤实现:

  1. 根据你的 json 创建一个键值对的数组
  2. 仅将具有 1 个值的元素修改为不是数组(使用 array-map

以这段代码为例:

$s = '[{"stad":"\u00d6rebro","lokalnamn":"Allm\u00e4nrepan"},{"stad":"Kumla","lokalnamn":"Rum 1"},{"stad":"Kumla","lokalnamn":"Rum 2"},{"stad":"Kumla","lokalnamn":"Rum 4"},{"stad":"Karlstad","lokalnamn":"UNO"},{"stad":"Karlstad","lokalnamn":"Replokal 231"}]';

$arr = json_decode($s, true);
$res = array();
foreach($arr as $elem) {
    $key = $elem["stad"];
    $value = $elem["lokalnamn"];
    if (array_key_exists($key, $res)) {
        $res[$key][] = $value;
    } else {
        $res[$key] = array($value);
    }
}

$a = array_map(function($elem) {
    if (is_array($elem) && count($elem) == 1)
        return $elem[0];
    else return $elem;
},$res);

这会给你:

Array
(
    [Örebro] => Allmänrepan
    [Kumla] => Array
        (
            [0] => Rum 1
            [1] => Rum 2
            [2] => Rum 4
        )

    [Karlstad] => Array
        (
            [0] => UNO
            [1] => Replokal 231
        )
)

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2018-02-22
    • 2013-11-13
    相关资源
    最近更新 更多