<?php
  define('OID_NUMERIC', 1);
  define('OID_TEXT', 0);
  function oid_format($oid, $format=OID_TEXT)
  {
    static $nodes = NULL;

    if(is_null($oid) || (is_array($oid) && count($oid) == 0) || (!is_array($oid) && strlen($oid) == 0)) return $oid;

    if(is_null($nodes))
      $nodes = unserialize(file_get_contents(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'oid_format.data'));

    $ret_type = 'string';
    if(is_array($oid))
    {
      $oid = join('.', $oid);
      $ret_type = 'array';
    }
    elseif($oid{0} != '.')
      $oid = '1.3.6.1.2.1.' . $oid;

    while($oid{0} == '.') $oid = substr($oid, 1);

    $oid = explode('.', $oid);

    $parent = '';
    for($i = 0; $i < count($oid); $i++)
    {
      if(!isset($nodes[$parent]))
      {
        if($ret_type == 'array') return $oid;
        return '.' . join('.', $oid);
      }
      $rec = $nodes[$parent];
      if(is_numeric($oid[$i]))
      {
        if(!isset($rec[$oid[$i]]))
        {
          if($ret_type == 'array') return $oid;
          return '.' . join('.', $oid);
        }
        $parent = $rec[$oid[$i]];
        if($format == OID_TEXT) $oid[$i] = $parent;
      }
      else
      {
        $z = array_search($oid[$i], $rec);
        if($z === false)
        {
          if($ret_type == 'array') return $oid;
          return '.' . join('.', $oid);
        }
        $parent = $rec[$z];
        if($format == OID_NUMERIC) $oid[$i] = $z;
      }
    }
    if($ret_type == 'array') return $oid;
    return '.' . join('.', $oid);
  }
?>
