babaev-an 5b83b096e5 20250516
* [Dictionary] Добавлен метод Keys (): array, который возвращает все ключи словаря.
* [Dictionary] Добавлен метод Sort (bool $descending = false): void, который сортирует внутренние данные по ключам (в обратном порядке, если выбран $descending = true).
2025-05-16 23:35:48 +03:00

128 lines
3.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace goodboyalex\php_components_pack\classes;
use ArrayAccess;
use Countable;
use goodboyalex\php_components_pack\interfaces\ISerializable;
use goodboyalex\php_components_pack\traits\ArrayBasicTrait;
use IteratorAggregate;
/**
* Класс, описывающий словарь типа строка (ключ) -> значение любого типа (значение).
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0.1
* @since 1.0.14
*/
final class Dictionary implements ArrayAccess, IteratorAggregate, Countable, ISerializable
{
/**
* @var array $Container Контейнер.
*/
private array $Container = [];
// Реализация наследуемых интерфейсов и классов
use ArrayBasicTrait;
/**
* Добавление элемента в словарь.
*
* @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);
}
}