Връщам 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;
}
});