* [Dictionary] Добавлен метод Keys (): array, который возвращает все ключи словаря. * [Dictionary] Добавлен метод Sort (bool $descending = false): void, который сортирует внутренние данные по ключам (в обратном порядке, если выбран $descending = true).
128 lines
3.7 KiB
PHP
128 lines
3.7 KiB
PHP
<?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);
|
||
}
|
||
} |