2

PHPを使用してWebサービスからJSONを返しています。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 ) )

ksortを使用して、Totalキーを介して昇順で配列を並べ替えようとしました。合計が最も多いオブジェクトが最初になり、残りが昇順で続くように、この配列を並べ替えるにはどうすればよいですか?

4

2 に答える 2

5

これはあなたのために働くはずです:

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

からのオブジェクトの代わりに連想配列が必要な場合はjson_decodejson_decode(..., true)

于 2013-01-15T20:47:58.427 に答える
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;
    }
});
于 2013-01-15T20:47:50.207 に答える