Étant donné un tableau d'objets où chaque objet du tableau ressemble à ceci :

  "success": true,
  "data": [
    {
      "doctor_id": 4, -- Use this id for getting in method get inquiry doctor offers.
      "clinic": "John",
      "distance": "10 mile"
      "city": "Los Angeles",
      "price": "123",
      "photo": false,
      "rating": {
        "stars": null,
        "reviews": null
      },
      "add_info"=> "Some information",
      "time_after_create": 942 -- in seconds.
    }
  ]

Existe-t-il une méthodologie en php qui me permettra de trier par $data->prix de bas en haut et de haut en bas, puis de trier également par $data->rating->starsoù les étoiles sont un nombre compris entre 0 et 5 ?

J'ai jeté un œil à la réponse ici qui parle de array_multisort ().

Mais je ne sais pas si cela correspond à ce que je recherche.

Toutes les idées ou idées sont les bienvenues.

0
m.chiang 6 juil. 2016 à 20:50

2 réponses

Meilleure réponse

Utilisez usort, voici un exemple :

function cmp($a, $b)
{
    return strcmp($a->name, $b->name);
}

usort($your_data, "cmp");

Dans votre cas, je peux vous proposer rapidement la solution suivante :

function cmp($a, $b)
{
    if ($a->price == $b->price) {
        return 0;
    }
    return ($a->price < $b->price) ? -1 : 1;
}
usort($your_data, array($this, "cmp"));

Note : "cmp" est la fonction appelable (elle doit être utilisée pour PHP >5.3)

1
SanjiMika 6 juil. 2016 à 21:44

Vous devriez peut-être utiliser le paramètre $assoc lors du décodage de ce json. Il vous donnera les données sous forme de tableau au lieu d'un objet afin que vous puissiez trier ce tableau. json_decode

$array1 = json_decode($input, TRUE);

Je pense que cela peut également être utile si vous lisez sur Object Iteration en php .

0
Mahdyfo 6 juil. 2016 à 20:57