LDAPAccountManager/lam/lib/3rdParty/composer/pear-pear.horde.org/Horde_Support/Horde/Support/Array.php

202 lines
4.2 KiB
PHP

<?php
/**
* Copyright 2007-2017 Horde LLC (http://www.horde.org/)
*
* @todo - Incorporate stuff from Horde_Array?
* - http://docs.python.org/lib/typesmapping.html
*
* @category Horde
* @package Support
* @license http://www.horde.org/licenses/bsd
*/
class Horde_Support_Array implements ArrayAccess, Countable, IteratorAggregate
{
/**
* Array variables
*/
protected $_array = array();
/**
*/
public function __construct($vars = array())
{
if (is_array($vars)) {
$this->update($vars);
}
}
/**
*/
public function get($key, $default = null)
{
return isset($this->_array[$key]) ? $this->_array[$key] : $default;
}
/**
* Gets the value at $offset. If no value exists at that offset, or the
* value $offset is NULL, then $default is set as the value of $offset.
*
* @param string $offset Offset to retrieve and set if unset
* @param string $default Default value if $offset does not exist
*
* @return mixed Value at $offset or $default
*/
public function getOrSet($offset, $default = null)
{
$value = $this->offsetGet($offset);
if (is_null($value)) {
$this->offsetSet($offset, $value = $default);
}
return $value;
}
/**
* Gets the value at $offset and deletes it from the array. If no value
* exists at $offset, or the value at $offset is null, then $default
* will be returned.
*
* @param string $offset Offset to pop
* @param string $default Default value
*
* @return mixed Value at $offset or $default
*/
public function pop($offset, $default = null)
{
$value = $this->offsetGet($offset);
$this->offsetUnset($offset);
return isset($value) ? $value : $default;
}
/**
* Update the array with the key/value pairs from $array
*
* @param array $array Key/value pairs to set/change in the array.
*/
public function update($array)
{
if (!is_array($array) && !$array instanceof Traversable) {
throw new InvalidArgumentException('expected array or traversable, got ' . gettype($array));
}
foreach ($array as $key => $val) {
$this->offsetSet($key, $val);
}
}
/**
* Get the keys in the array
*
* @return array
*/
public function getKeys()
{
return array_keys($this->_array);
}
/**
* Get the values in the array
*
* @return array
*/
public function getValues()
{
return array_values($this->_array);
}
/**
* Clear out the array
*/
public function clear()
{
$this->_array = array();
}
/**
*/
public function __get($key)
{
return $this->get($key);
}
/**
*/
public function __set($key, $value)
{
$this->_array[$key] = $value;
}
/**
* Checks the existance of $key in this array
*/
public function __isset($key)
{
return array_key_exists($key, $this->_array);
}
/**
* Removes $key from this array
*/
public function __unset($key)
{
unset($this->_array[$key]);
}
/**
* Count the number of elements
*
* @return integer
*/
public function count()
{
return count($this->_array);
}
/**
*/
public function getIterator()
{
return new ArrayIterator($this->_array);
}
/**
* Gets the value of $offset in this array
*
* @see __get()
*/
public function offsetGet($offset)
{
return $this->__get($offset);
}
/**
* Sets the value of $offset to $value
*
* @see __set()
*/
public function offsetSet($offset, $value)
{
return $this->__set($offset, $value);
}
/**
* Checks the existence of $offset in this array
*
* @see __isset()
*/
public function offsetExists($offset)
{
return $this->__isset($offset);
}
/**
* Removes $offset from this array
*
* @see __unset()
*/
public function offsetUnset($offset)
{
return $this->__unset($offset);
}
}