2016-07-20 3 views
0

Я посмотрел немного и нашел ответ, который частично делает то, что я заинтересован в этом, см: Sorting a JSON array in PHPРекурсивных сортировки массива 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" 

     } 
    ] 
} 

Что бы я хотел сделать, это сортировать все по алфавиту, чтобы его было легче читать и унифицировать. Так что я бы увидел:

{ 
    "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" 
} 

Каждый элемент сортируется в алфавитном порядке. Это возможно ?

+0

нет массива, только объекты –

+0

@LarsStegelitz В PHP они были бы ассоциативными массивами. – Barmar

+0

Напишите рекурсивную функцию, которая использует 'ksort()'. Он должен будет принять аргумент массива в качестве эталонного параметра. – Barmar

ответ

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

+0

Это будет работать. Это своего рода вещь тщеславия и развития, но она позволяет легко визуально сравнивать записи для ответов, которые имеют одинаковую структуру, но разные данные. Благодарю. – sscotti

Смежные вопросы