/ / PHP GET JSON използва cURL, сортиране връща масив - php, json, curl

PHP GET JSON с помощта на cURL, сортиране на връщания масив - php, json, curl

Връщам JSON от уеб услуга, използваща PHP. Аз съм в състояние да получите JSON, да го декодирате и да видите резултатите. Трябва обаче да мога да сортирам масива с определена стойност. Понастоящем имам:

// 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);

Най- print_r($data); отпечатва това:

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 ) )

Опитвах се да използвам ксорт и да сортирам масива по възходящ ред чрез Total ключ. Как мога да сортирам този масив, така че обектът с най-високата сума да е пръв, а останалите да следват във възходящ ред?

Отговори:

5 за отговор № 1

Това трябва да работи за вас:

usort($data, function ($a, $b) {
return $a->Total - $b->Total;
});

Имайте предвид, че ако искате асоциативен масив вместо обекти json_decode, след това използвайте json_decode(..., true)


2 за отговор № 2

Имате множество обекти. Като такъв, ще трябва да определите свои собствени правила за сортиране. Трябва да използвате usort() за това. Може би нещо подобно:

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