Vraciam JSON z webovej služby pomocou PHP. Dokážem získať JSON, dekódovať ho a zobraziť výsledky. Musím však byť schopný zoradiť pole podľa konkrétnej hodnoty. Momentálne mám:
// JSON URL which should be requested
$json_url = "https://*******/maincategories";
// Initializing curl
$ch = curl_init( $json_url );
// Configuring curl options
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array("Content-type: application/json") ,
);
// Setting curl options
curl_setopt_array( $ch, $options );
// Getting results
$result = curl_exec($ch); // Getting JSON result string
$data = json_decode($result);
ksort($data, "Total");
print_r($data);
Na print_r($data);
vytlačí to:
Array ( [0] => stdClass Object ( [Goal] => 10000000 [Name] => Rental [Total] => 500000 ) [1] => stdClass Object ( [Goal] => 8000000 [Name] => National Sales [Total] => 750000 ) [2] => stdClass Object ( [Goal] => 120000000 [Name] => Vendor Leasing [Total] => 500000 ) )
Pokúšal som sa použiť ksort a zoradiť pole podľa vzostupného poradia cez Total
Kľúč. Ako môžem zoradiť toto pole tak, aby bol najskôr objekt s najvyšším súčtom a zvyšok nasledoval vzostupne?
odpovede:
5 pre odpoveď č. 1To by malo fungovať pre vás:
usort($data, function ($a, $b) {
return $a->Total - $b->Total;
});
Všimnite si, že ak chcete namiesto asociačných objektov asociatívne pole json_decode
, potom použite json_decode(..., true)
2 pre odpoveď č. 2
Máte celý rad objektov. Preto budete musieť definovať svoje vlastné pravidlá triedenia. Mali by ste použiť usort()
pre to. Možno niečo také:
usort($data, function ($a, $b) {
if ((int)$a->Total > (int)$b->Total)) {
return 1;
} else if ((int)$a->Total < (int)$b->Total)) {
return -1;
} else {
return 0;
}
});