/ / PHP GET JSON pomocou CURL, triedenie vráteného poľa - php, json, curl

PHP GET JSON pomocou cURL, triedenie vráteného poľa - php, json, curl

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ď č. 1

To 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;
}
});