Как сортировать многомерный (json) массив с помощью PHP - PullRequest
2 голосов
/ 13 июля 2011

Может кто-нибудь помочь мне, пожалуйста ... Я прочитал предыдущие вопросы PHP по "сортировке" ... и попытался следовать логике ... но затухание мозга преобладает; -!

У меня есть объект json (из Facebook), который я пытаюсь отсортировать, используя одно из значений ('create_time'), используя следующий код:

$json = file_get_contents($url,0,null,null);
$result = json_decode($json, true);
array_multisort($note['created_time'], SORT_ASC, $result);   /* what's wrong with this line?? */

Пример данных JSON, показанных ниже:

{
   "data": [
      {
         "id": "123",
         "from": {
            "name": "Example",
            "category": "Musician/band",
            "id": "123"
         },
         "subject": "Subject 1",
         "message": "Example message text 1",
         "created_time": "2011-07-12T20:18:17+0000",
      },
      {
         "id": "123",
         "from": {
            "name": "Example",
            "category": "Musician/band",
            "id": "123"
         },
         "subject": "Subject 2",
         "message": "Example message text 2",
         "created_time": "2011-07-12T20:21:01+0000",
      },
...

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Ваш PHP-фрагмент ссылается на объект $ note, но я просто вижу переменные $ json и $ result ...

Если у нас есть массив данных, вы можете использовать usort с пользовательской функцией ... это может быть анонимная функция, если вы используете PHP 5.3 +

function sort_by_creation($a, $b) 
{
  return (strtotime($a['created_time']) < strtotime($b['created_time']) ? -1 : 1;
}
usort($data, 'sort_by_creation');
0 голосов
/ 13 июля 2011

Я не уверен, что это сработает. Откуда берется $ note? Если вы пытаетесь отсортировать массив по определенному члену, что насчет usort? http://php.net/manual/en/function.usort.php

так что-то вроде:

function sortByCreatedTime($a, $b){
  if ($strtotime($a['data']['created_time']) == strtotime($b['data']['created_time'])) {
    return 0;
  };
  return ($strtotime($a['data']['created_time']) < strtotime($b['data']['created_time'])) ? -1 : 1;
};
usort($result, sortByCreatedTime);
for($i = 0; $i < count($results['data']); $i++){
  //should output in descending order.  if not just change 
  //the < to a > in the sort function above
  echo 'time is => ' . $results['data']['created_time'] . '<br>';
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...