JSON 数组按键排序
JSON Array Sort by Key
我有此代码可以从 API:
获取 JSON 数据
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
),其中只有 "lastvalue"。现在我正在尝试按 "hostid" 对这些值进行排序。这可能吗?如何实现?
您需要 php 函数 "asort":
http://php.net/manual/en/function.asort.php
它对数组进行排序,维护索引关联。
如果您不介意保留索引关联,请使用 sort():
首先你必须排序 $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');
我有此代码可以从 API:
获取 JSON 数据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
),其中只有 "lastvalue"。现在我正在尝试按 "hostid" 对这些值进行排序。这可能吗?如何实现?
您需要 php 函数 "asort":
http://php.net/manual/en/function.asort.php
它对数组进行排序,维护索引关联。
如果您不介意保留索引关联,请使用 sort():
首先你必须排序 $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');