php Как объединить данные 2 json и отобразить порядок результатов по дате? - PullRequest
0 голосов
/ 27 февраля 2011
{"query":
{"data":{
"item":[{"title":"some word1",
"date":"Sat, 26 Feb 2011 21:02:01"},
{"title":"some word2",
"date":"Sat, 26 Feb 2011 17:02:01"}]
}}}


{"query":
{"text":{
"body":[{"title":"some word3",
"time":"Sat, 26 Feb 2011 20:22:21"},
{"title":"some word4",
"time":"Sat, 26 Feb 2011 19:11:59"}]
}}}

Есть 2 json-данных, как их объединить и отобразить результат, который является порядком по дате?Мне нужен результат как:

some word1 Sat, 26 Feb 2011 21:02:01
some word3 Sat, 26 Feb 2011 20:22:21
some word4 Sat, 26 Feb 2011 19:11:59
some word2 Sat, 26 Feb 2011 17:02:01

Спасибо

Ответы [ 3 ]

2 голосов
/ 27 февраля 2011

Используйте json_decode для декодирования строки json в массив, а затем сортируйте массив, используя любой алгоритм сортировки.

0 голосов
/ 27 февраля 2011

Как то так?

<?php
$data = array();

// Parse the json into a clean array
$json = json_decode('{"query": 
    {"data":
    { "item":[{"title":"some word1", "date":"Sat, 26 Feb 2011 21:02:01"},
    {"title":"some word2", "date":"Sat, 26 Feb 2011 17:02:01"}] }}} ');

foreach($json->query->data->item as $body){
    $data[strtotime($body->date)][] = $body->title;
}

$json = json_decode(' {"query": 
{"text":
{ "body":[
{"title":"some word3", "time":"Sat, 26 Feb 2011 20:22:21"}, 
{"title":"some word4", "time":"Sat, 26 Feb 2011 19:11:59"}] }}}');

foreach($json->query->text->body as $body){
    $data[strtotime($body->time)][] = $body->title;
}

// Sort the timestamps
ksort($data,SORT_NUMERIC);

// Display the data any way you want
foreach($data as $timestamp => $titles){
    foreach($titles as $title){
        echo $title, ' ', date('r',$timestamp), PHP_EOL;
    }
}
0 голосов
/ 27 февраля 2011

Вам нужно будет поработать, чтобы объединить их. Чтобы получить такой результат сортировки, как вы, вам нужно объединить массив «item» второй строки json с массивом «body» первого. Чтобы сравнить даты, имейте в виду, что поля двух строк json имеют два разных имени: «время» и «дата», об этом нужно позаботиться в вашей функции сортировки.

Структуры немного лучше reabable:

{
   "query":{
      "data":{
         "item":[
            {
               "title":"some word1",
               "date":"Sat, 26 Feb 2011 21:02:01"
            },
            {
               "title":"some word2",
               "date":"Sat, 26 Feb 2011 17:02:01"
            }
         ]
      }
   }
}


{
   "query":{
      "text":{
         "body":[
            {
               "title":"some word3",
               "time":"Sat, 26 Feb 2011 20:22:21"
            },
            {
               "title":"some word4",
               "time":"Sat, 26 Feb 2011 19:11:59"
            }
         ]
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...