PHP HashTable implementation


Here’s a quick/dirty HashTable implementation for PHP (based on the Java Hashtable API).  There are probably better ones, but for what it’s worth … here ya go:

class CHashTable
{
  private $_arr = null;

  function __construct()
  {
    $this->_arr = array();
  }

  function clear()
  {
    unset( $this->_arr );
    $this->_arr = array();
  }

  function contains($value, $bStrict=false)
  {
    return in_array($value, $this->_arr, $bStrict);
  }

  function containsKey($key)
  {
    return array_key_exists($key, $this->_arr);
  }

  function containsValue($value, $bStrict=false)
  {
    return $this->contains($value, $bStrict);
  }

  function get($key)
  {
    $value = null;

    if( array_key_exists($key, $this->_arr) )
    {
      $value = $this->_arr[$key];
    }

    return $value;
  }

  function isEmpty()
  {
    return ($this->size()<=0);   }   function keys()   {     return array_keys($this->_arr);
  }

  function put($key, $value)
  {
    $this->_arr[$key] = $value;
  }

  function putAll($arr)
  {
    if( $arr!==null )
    {
      if( is_array($arr) )
      {
        $this->_arr = array_merge($this->_arr, $arr);
      }
      else if( $arr instanceof CHashTable )
      {
        $this->_arr = array_merge($this->_arr, $arr->_arr);
      }
    }
  }

  function remove($key)
  {
    unset( $this->_arr[$key] );
  }

  function size()
  {
    return count($this->_arr);
  }

  function toString()
  {
    return print_r($this->_arr, true);
  }

  function values()
  {
    return array_values($this->_arr);
  }
}

The term “hashtable” may be a little loose  here.  There is no hashing or indexing done to increase performance.  The purpose here was to have some PHP object class to mimic the behavior of a Java Hashtable; it is really use an API wrapper around some PHP associative array.  It makes my life easier when porting code.

There may be some issues here, I haven’t really put it through it’s paces yet.  I’m writing some database code and needed a base class for data objects that behaves like a Hashtable.

If you have any constructive comments/suggestions, let me know.  As always, the commenting rules apply…


Leave a Reply