SoloCodigo

Programación Web y Scripting => PHP => Mensaje iniciado por: elpollo12 en Sábado 7 de Noviembre de 2009, 14:04

Título: Extraer parte de un arreglo
Publicado por: elpollo12 en Sábado 7 de Noviembre de 2009, 14:04
Buenas tardes. Saludos, el asunto es que surge un problema ya que tengo el siguiente arreglo que se forma tras hacer un explode.

Código PHP:
$cantidades=explode("IF-MIB::ifDescr.",$var);  
Al mostrarlo con un echo:
Código PHP:
echo $cantidades[2];  
me sale lo siguiente:

2 = STRING: eth0

Pero yo necesito extraer de ahi, solo "2" y "eth0", es decir eliminar el " = STRING: " y quedarme con lo demas, si es posible guardandolo en otro arreglo. No se si hay posibilidades de hacer eso.

Este es el código completo que tengo:

Código PHP:
$com="snmpwalk  -c public -v 1 192.168.100.130 ifdesc ".$ip;
$var=shell_exec($com);
$cantidades=explode("IF-MIB::ifDescr.",$var);
echo $cantidades[1];  
en $var lo que hago es guardar lo que resulta de la ejecución que se hace en $com.

ese comando que le paso en $com si lo ejecuto en la terminal de debian me saca algo como:

IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0

ya con el explode, logre reducir bastante esa cadena, hasta quedarme con "1 = STRING: lo", pero yo solo necesito el "1" y el "lo".. y si es posible guardar eso en un arreglo.

Todo ésto lo hago porque necesito sacar la descripción de una interfaz con snmp (monitoreo de redes) y mostrarla en un archivo php.... y en el caso que planteo el "1" sería la interfaz y "lo", la descripción. Si logro sacar solo eso, entonces lo desearía guardar en un arreglo de manera que me quedara algo como:

Código PHP:
$arreglo[0] // sería el 1
$arreglo[1] // sería el lo  

De antemano, muchas gracias.
Título: Re: Extraer parte de un arreglo
Publicado por: lair en Lunes 9 de Noviembre de 2009, 18:29
Hola.

Puedes probar haciendo otro explode, pero ahora buscas "STRING:"
y con eso te quedara $tu_variable[0]='eth0'

suerte.
Título: Re: Extraer parte de un arreglo
Publicado por: DriverOp en Lunes 9 de Noviembre de 2009, 20:15
Prueba lo siguiente.

Código: PHP
  1.  
  2. <?php
  3. $patron = "/^IF-MIB::ifDescr.(.*?)s=sSTRING:s(.*?)$/im";
  4. $texto = "IF-MIB::ifDescr.1 = STRING: lo
  5. IF-MIB::ifDescr.2 = STRING: eth0";
  6. $devuelve = preg_match_all($patron,$texto,$coincidencias);
  7. echo "<pre>";
  8. print_r($coincidencias);
  9. echo "</pre>"
  10. ?>
  11.  
  12.  

Como verás $coincidencias es un array multidimensional con índice numérico. Donde $coincidencias[1] es a su vez un array que contendrá los números que te interesan, y en $coincidencias[2] los strings que estás buscando.

Lo que uso aquí es una expresión regular (deberías aprender un poco de ellas, son muy útiles para casos como éste). El texto de búsqueda que usé es el que pusiste de ejemplo. preg_match_all devuelve lo que se indica como (.*?) que está en la expresión regular (que básicamente quiere decir "cualquier cosa").

Saludos.