递归排序JSON数组

时间:2016-07-20 19:08:04

标签: php arrays json sorting usort

我看了一下,找到了一个部分完成我感兴趣的答案,请参阅:Sorting a JSON array in PHP

我有一些解码的JSON看起来像这样,只是一个样本。

{
    "status": "OK",
    "page": {
        "rows": 5000,
        "more": 0,
        "number": 1
    },
    "accounts": [
        {
            "connected": 0,
            "settings": {
                "link_first_study_only": "0",
                "update_study_source_on_notify": "1",
                "link_external_whitelist": "",
                "other_ingress_tags": ""
            },
            "must_approve_upload": 0,
            "css": null,
            "share_via_gateway": 0,
            "password_expire": 90,
            "vanity": "medpics"

        }
    ]
}

我想要做的是按字母顺序排序所有内容,以便更容易阅读和统一。所以我会看到的是:

{
    "accounts": [
        {
            "css": null,
            "connected": 0,
            "must_approve_upload": 0,
            "password_expire": 90,
            "settings": {

                "link_external_whitelist": "",
                "link_first_study_only": "0",
                "other_ingress_tags": "",
                "update_study_source_on_notify": "1"
            },

            "share_via_gateway": 0,
            "vanity": "medpics"
        }
    ],
    "page": {
        "more": 0,
        "number": 1,
        "rows": 5000,
    }
    "status": "OK"
}

每个元素都按字母顺序排序。这可能吗?

1 个答案:

答案 0 :(得分:0)

非常简单

$json = <<<JSON
{
    "status": "OK",
    "page": {
        "rows": 5000,
        "more": 0,
        "number": 1
    },
    "accounts": [
        {
            "connected": 0,
            "settings": {
                "link_first_study_only": "0",
                "update_study_source_on_notify": "1",
                "link_external_whitelist": "",
                "other_ingress_tags": ""
            },
            "must_approve_upload": 0,
            "css": null,
            "share_via_gateway": 0,
            "password_expire": 90,
            "vanity": "medpics"

        }
    ]
}
JSON;

$json = json_decode($json, true);

function ksort_recursive(&$array) {
    ksort($array);
    foreach ($array as &$value) {
        if (is_array($value)) {
            ksort_recursive($value);
        }
    }
}

ksort_recursive($json);

print_r($json);

此处的解决方案证明

https://3v4l.org/qUAA0