babaev-an 2d16baaef9 20250520
[Dictionary] добавлен метод AddRange (array $dictionary), который добавляет элементы в виде ассоциативного массива ключ => значение в словарь.

[Dictionary] Добавлен метод ToArray (), который возвращает все элементы словаря в виде массива..
2025-05-20 12:42:06 +03:00

153 lines
4.5 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.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;
}
}