Даже не знаю как подступиться, php можно сказать, что и не знаю, а то, что знаю, явно не достаточно, Вроде бы задача тривиальная, но найти готового решения так и не удалось. Дано: php 5.3.23 libsnmp 5.7.2 snmprealwalk возращает таблицу в виде хэша: '1.2.3.4.aa.1.0'=>'StdNumber', value=>'требуемое значение 1' '1.2.3.4.aa.2.0'=>'StdNumber', value=>'требуемое значение 2' '1.2.3.4.bb.1.0'=>'StdNumber', value=>'требуемое значение 3' '1.2.3.4.bb.2.0'=>'StdNumber', value=>'требуемое значение 4' хотелось бы получить хэш хэшей, вида: [ aa => {'1'=>'требуемое значение 1', '2'=>'требуемое значение 2'} bb=>{'1'=>'требуемое значение 3', '2'=>'требуемое значение 4'} ] смотрел в сторону array_map и array_filter но не выходит каменный цветочек....
PHP: $new_arr = []; foreach($arr as $a) { foreach($a as $k => $v) { $index = ""; $key = ""; $value = ""; if($v === "StdNumber") { $key = substr($k, -3, 1); $index = substr($k, -6, 2); } if($k === "value") $value = $v; if($index && $key && $value) $new_arr[$index][$key] = $value; } } var_dump($new_arr); --- Добавлено --- хотя лучше explode(".", $k) --- Добавлено --- Ты кстати форум не перепутал? Может тебе руби нужен?
Не, ограничить по значению ключа "StdNumber" нельзя (оно не всегда такое), можно regexp по маске, но примерное понял, буду разбираться. СПАСИБО! думал одним массивом обойтись, а то не очень красиво огромные массивы в копии в памяти держать. Не с руби вообще не знаком, и нужно именно на пхп.
Ну так я и говорю, что с пхп почти не знаком Спасибо, идею понял, буду пробовать реализовать, пока с помощью хитрых параметров snmp удалось изменить исходный массив до вида Код (Text): '1.2.3.4.aa.1.0'=>'требуемое значение 1' '1.2.3.4.aa.2.0'=>'требуемое значение 2' '1.2.3.4.bb.1.0'=>'требуемое значение 3' '1.2.3.4.bb.2.0'=>'требуемое значение 4' т.е. можно избавиться от одного вложенного цикла, уже прогресс, буду копать дальше
Ещё один вопросик от чайника по php-шному массиву, чтоб тем не плодить: имеется ассоциативный массив, выбираю из него значение одного элемента: $ap_ind=$row[server]; получаю из adodb fetchRow проверяю: var_dump($ap_ind); Выдаёт: string(13) "192.168.1.104" Передаю как аргумент, функции, которая на входе ожидает строку: получаю предупреждение: Warning: snmprealwalk() expects parameter 1 to be string, array given in snmpwalk.php on line 20 Warning: Invalid argument supplied for foreach() in snmpwalk.php on line 21 строки 20 и 21: PHP: $snmp = snmprealwalk($ap_ind, "public", "$oid"); foreach($snmp as $a => $v) { Что ему не нравится?