значение любого типа (значение). * * @author Александр Бабаев * @package php_components_pack * @version 1.0.3 * @since 1.0.14 */ final class Dictionary implements ArrayAccess, IteratorAggregate, Countable, ISerializable { /** * @var array $Container Контейнер. */ private array $Container = []; // Реализация наследуемых интерфейсов и классов use ArrayBasicTrait; /** * Добавление элементов в словарь. * * @param array $dictionary Ассоциативный массив вида ключ => значение, который будет добавлен в словарь. * * @return void */ public function AddRange (array $dictionary): void { // Для каждого элемента массива foreach ($dictionary as $key => $value) // - добавляем его в словарь. $this->Add($key, $value); } /** * Добавление элемента в словарь. * * @param string $key Ключ. * @param mixed $value Хранимое значение. * * @return void */ public function Add (string $key, mixed $value): void { $this->Container[$key] = $value; } /** * Получение значения по ключу. * * @param string $key Ключ. * @param mixed $default Значение по умолчанию, которое будет возвращено, если элемент с указанным ключом * отсутствует. * * @return mixed Если элемент существует, то возвращается его значение, иначе default. */ public function Get (string $key, mixed $default = null): mixed { return $this->Container[$key] ?? $default; } /** * Удаление элемента по ключу. * * @param string $key Ключ. * * @return void */ public function Remove (string $key): void { // Если элемент с указанным ключом существует if ($this->Has($key)) // - то удаляем его. unset($this->Container[$key]); } /** * Проверка наличия элемента с указанным ключом. * * @param string $key Ключ. * * @return bool Есть ли элемент с указанным ключом. */ public function Has (string $key): bool { return isset($this->Container[$key]); } /** * Очистка всех элементов. * * @return void */ public function Clear (): void { $this->Container = []; } /** * @inheritDoc */ public function count (): int { return count($this->Container); } /** * Возвращает все ключи словаря. * * @return array Массив всех ключей словаря. */ public function Keys (): array { return array_keys($this->Container); } /** * Сортирует внутренние данные по ключам. * * @param bool $descending Сортировать ли данные в обратном порядке? * * @return void */ public function Sort (bool $descending = false): void { // Если задана сортировка по убыванию if ($descending) // - сортируем данные в обратном порядке krsort($this->Container); else // - иначе, стандартная сортировка по ключам в порядке возрастания ksort($this->Container); } /** * Возвращает все элементы словаря в виде массива. * * @return array Массив, содержащий все элементы словаря. */ public function ToArray (): array { return $this->Container; } }