Zależy gdzie to się jeszcze obrabia. Tak sobie trochę poćwiczyłem:
define('SORT_ASCENDING', 1);
define('SORT_DESCENDING', -1);
$json = '{"success" : true,"message" : "","result" : [{"Nazwa" : "A","Ile" : "3"}, {"Nazwa" : "B","Ile" : "1"}, {"Nazwa" : "C","Ile" : "2"}]}';
$array = json_decode($json, true);
function compare($a, $b, $key, $value)
{
if ($a == $b)
{
return 0;
}
return $a[$key] > $b[$key] ? $value : -$value;
}
function build_sorter($key, $direction = SORT_ASCENDING)
{
return function ($a, $b) use ($key, $direction)
{
return compare($a, $b, $key, $direction);
};
}
usort($array['result'], build_sorter('Ile', SORT_ASCENDING));
echo json_encode($array);
Jeśli do zmiennej $json przypisze tak jak ty:
$json = '{"success" : true,"message" : "","result" : [{"Nazwa" : "A","Ile" : "3"}, {"Nazwa" : "B","Ile" : "1"}, {"Nazwa" : "C","Ile" : "2"}]}';
to działa sortowanie ale API zwraca za każdym razem inne wartości, wieć trzeba tak zrobić żeby nie przypisywać do zmiennej $json tego co zwróci, próbowałem zrobić tak
<?php
define('SORT_ASCENDING', 1);
define('SORT_DESCENDING', -1);
$apikey = '';
$apisecret = '';
$nonce=time();
$uri='';
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);
$json = $obj;
$array = json_decode($json, true);
function compare($a, $b, $key, $value)
{
if ($a == $b)
{
return 0;
}
return $a[$key] > $b[$key] ? $value : -$value;
}
function build_sorter($key, $direction = SORT_ASCENDING)
{
return function ($a, $b) use ($key, $direction)
{
return compare($a, $b, $key, $direction);
};
}
usort($array['result'], build_sorter('Ile', SORT_ASCENDING));
echo json_encode($array);
?>
ale nie działa