У меня есть этот код для получения данных JSON из API:
try {
// connect to Zabbix-API
$api = new ZabbixApi($api_url, $username, $password);
$params = array(
'groupids' => '2',
'real_items' =>TRUE,
'monitored_items' =>TRUE,
'search' => array('name' => 'Disk root used p'),
'selectFunctions' => 'extend',
'output' => 'extend',
'sortfield' => 'name'
);
$trends = $api->itemGet($params); // get data from api
$names = array();
foreach($trends as $trend) { // loop through the returned data
$names[] = $trend->lastvalue;
}
} catch(Exception $e) {
// Exception in ZabbixApi catched
echo $e->getMessage();
}
Ответ:
"result": [
{
"itemid": "23298",
"hostid": "10084",
"lastvalue": "2552",
"name": "Disk root used p"
},
Как вы можете видеть, я создал массив ($names
) с только "последним значением" в нем. Теперь я пытаюсь сортировать эти значения с помощью "hostid". Это возможно и как?
Сначала вам нужно отсортировать $trends
а затем вы можете создать $names
Вы можете сделать это, используя функцию usort
. Он принимает массив и имя функции, которую вы хотите использовать для сортировки. Например
function sort_trends_by_hostid($a, $b) {
if ( $a->hostid == $b->hostid ) {
return 0;
}
return ($a->hostid < $b->hostid) ? -1 : 1;
}
usort($trends, 'sort_trends_by_hostid');
Источник Дэвид Уолш
Вы хотите, чтобы функция php "asort":
http://php.net/manual/en/function.asort.php
он сортирует массив, поддерживая ассоциации индексов.
если вы не суетитесь о сохранении ассоциаций индексов, используйте sort():
lastvalue
при вызове API, чтобы API возвращал результаты по вашему желанию без какой-либо дополнительной сортировки, требуемой в вашем коде?