| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- /**
- * This file is part of the Nette Framework (https://nette.org)
- * Copyright (c) 2004 David Grudl (https://davidgrudl.com)
- */
- declare(strict_types=1);
- namespace Nette\Utils;
- use Nette;
- /**
- * Provides objects to work as array.
- */
- class ArrayHash extends \stdClass implements \ArrayAccess, \Countable, \IteratorAggregate
- {
- /**
- * Transforms array to ArrayHash.
- * @return static
- */
- public static function from(array $array, bool $recursive = true)
- {
- $obj = new static;
- foreach ($array as $key => $value) {
- $obj->$key = $recursive && is_array($value)
- ? static::from($value, true)
- : $value;
- }
- return $obj;
- }
- /**
- * Returns an iterator over all items.
- */
- public function getIterator(): \RecursiveArrayIterator
- {
- return new \RecursiveArrayIterator((array) $this);
- }
- /**
- * Returns items count.
- */
- public function count(): int
- {
- return count((array) $this);
- }
- /**
- * Replaces or appends a item.
- * @param string|int $key
- * @param mixed $value
- */
- public function offsetSet($key, $value): void
- {
- if (!is_scalar($key)) { // prevents null
- throw new Nette\InvalidArgumentException(sprintf('Key must be either a string or an integer, %s given.', gettype($key)));
- }
- $this->$key = $value;
- }
- /**
- * Returns a item.
- * @param string|int $key
- * @return mixed
- */
- public function offsetGet($key)
- {
- return $this->$key;
- }
- /**
- * Determines whether a item exists.
- * @param string|int $key
- */
- public function offsetExists($key): bool
- {
- return isset($this->$key);
- }
- /**
- * Removes the element from this list.
- * @param string|int $key
- */
- public function offsetUnset($key): void
- {
- unset($this->$key);
- }
- }
|