Как получить уникальные индексы в массиве? (из запроса в SNMP)
уважаемые гуру! На PHP пишу запрос на принтер, для отслеживания заданий о печати. Начальный запрос:
$xcmJobName=snmp2_real_walk("10.194.219.221", "public", ".1.3.6.1.4.1.253.8.59.6.1");
В ответ приходит следующий ответ:
array(22) {
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.2.151.8.48.48.48.49.52.66.50.69"]=>
string(2) """"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.2.151.8.48.48.48.49.52.66.51.49"]=>
string(2) """"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.3.151.8.48.48.48.49.52.66.50.69"]=>
string(58) "STRING: "8sviridov_aa 08122909""
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.3.151.8.48.48.48.49.52.66.51.49"]=>
string(2) """"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.4.151.8.48.48.48.49.52.66.50.69"]=>
string(41) "OID: SNMPv2-SMI::enterprises.253.8.58.2.8"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.4.151.8.48.48.48.49.52.66.51.49"]=>
string(41) "OID: SNMPv2-SMI::enterprises.253.8.58.2.8"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.5.151.8.48.48.48.49.52.66.50.69"]=>
string(18) "INTEGER: 268520238"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.5.151.8.48.48.48.49.52.66.51.49"]=>
string(18) "INTEGER: 268520241"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.6.151.8.48.48.48.49.52.66.50.69"]=>
string(18) "INTEGER: 285297454"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.6.151.8.48.48.48.49.52.66.51.49"]=>
string(18) "INTEGER: 285297457"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.7.151.8.48.48.48.49.52.66.50.69"]=>
string(11) "INTEGER: 38"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.7.151.8.48.48.48.49.52.66.51.49"]=>
string(10) "INTEGER: 1"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.8.151.8.48.48.48.49.52.66.50.69"]=>
string(10) "INTEGER: 0"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.8.151.8.48.48.48.49.52.66.51.49"]=>
string(10) "INTEGER: 0"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.9.151.8.48.48.48.49.52.66.50.69"]=>
string(11) "INTEGER: 17"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.9.151.8.48.48.48.49.52.66.51.49"]=>
string(11) "INTEGER: 17"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.10.151.8.48.48.48.49.52.66.50.69"]=>
string(12) "INTEGER: 256"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.10.151.8.48.48.48.49.52.66.51.49"]=>
string(11) "INTEGER: 16"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.11.151.8.48.48.48.49.52.66.50.69"]=>
string(10) "INTEGER: 0"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.11.151.8.48.48.48.49.52.66.51.49"]=>
string(10) "INTEGER: 0"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.12.151.8.48.48.48.49.52.66.50.69"]=>
string(10) "INTEGER: 0"
["SNMPv2-SMI::enterprises.253.8.59.6.1.1.12.151.8.48.48.48.49.52.66.51.49"]=>
string(10) "INTEGER: 0"
}
Так вот мне необходимо, получить уникальные ключи этих значений из строк:
SNMPv2-SMI::enterprises.253.8.59.6.1.1.2.151.8.48.48.48.49.52.66.50.69
SNMPv2-SMI::enterprises.253.8.59.6.1.1.3.151.8.48.48.48.49.52.66.51.49
(и далее по списку, подменяя значения 2-3-4-5 и т.д.)
SNMPv2-SMI::enterprises.253.8.59.6.1.1. - это строка постоянная.
Цифры 2-3 и т.д. это количество столбцов массива (я знаю сколько их будет, в некоторых местах 3, в некоторых 5 колонок)
Мне нужно выделить в отдельный массив уникальные значения: 151.8.48.48.48.49.52.66.50.69, поскольку эти значения динамические, и они изменяются.
Внутри MIB-файла получение индекса невозможно, но если в MIB-браузере делать TableView - то он эти индексы сам выделяет в отдельную колонку
Не могу додуматься, как сделать обработку результата массива, чтобы получить такой же массив индексов.
Заранее спасибо!
Ответы (1 шт):
Написал! Достаточно просто, но если кто-то знает более элегантное решение, прошу написать.
$xcmJobName=snmp2_real_walk("10.194.219.221", "public", ".1.3.6.1.4.1.253.8.59.6.1");
//выбираем все только ключи
$all_keys = array_keys($xcmJobName);
$new_array=[];
for ($i=0; $i<count($all_keys); $i++){
for ($z=0; $z<13; $z++){
$delete1 = "SNMPv2-SMI::enterprises.253.8.59.6.1.1.".$z.".";
//удаляем ненужное
$OID = str_replace($delete1, "", $all_keys[$i]);
}
if ($OID!=$all_keys[$i]){
//если после замены, что-то изменилось, значит добавляем это в новый массив
array_push($new_array, $OID);
}
}
echo "<pre>";
print_r($new_array);
echo "</pre>";