Класс Hash
Библиотека функций для массивов, предназначенная для манипулирования и извлечения данных из массивов или наборов данных.
Hash предоставляет улучшенный интерфейс, более согласованный и предсказуемый набор функций по сравнению с Set. Хотя в нем отсутствует неравномерная поддержка псевдо-XPath, его более полнофункциональная точечная нотация обеспечивает аналогичные функции в более согласованной реализации.
Краткое описание методов
-
_filter() protected static
Функция обратного вызова для фильтрации.
-
_matchToken() protected static
Проверка ключа на соответствие токену.
-
_matches() protected static
Проверяет, соответствуют ли данные шаблонам атрибутов
-
_merge() protected static
Вспомогательная функция слияния для уменьшения дублирования кода между merge() и expand().
-
_simpleOp() protected static
Выполнение простой операции вставки/удаления.
-
_splitConditions() protected static
Разделение условий токенов
-
_squash() protected static
Вспомогательный метод для sort() Сжимает массив в один хэш, чтобы его можно было отсортировать.
-
apply() public static
Применить обратный вызов к набору извлеченных значений, используя
$function. Функция получит извлеченные значения в качестве первого аргумента. -
check() public static
Проверяет, существует ли данный путь в $data. Этот метод использует тот же синтаксис пути, что и Hash::extract()
-
combine() public static
Создает ассоциативный массив, используя
$keyPathв качестве пути для построения ключей, и необязательно$valuePathв качестве пути для получения значений. Если$valuePathне указан, все значения будут инициализированы как null (полезно для Hash::merge). Необязательно можно сгруппировать значения по тому, что получается при следовании пути, указанному в$groupPath. -
contains() public static
Определяет, содержит ли один массив точно такие же ключи и значения, как другой.
-
diff() public static
Вычисляет разницу между двумя сложными массивами. Этот метод отличается от встроенной функции array_diff() тем, что он сохраняет ключи и работает с многомерными массивами.
-
dimensions() public static
Подсчитывает размерность массива. Учитывает только размерность первого элемента массива.
-
expand() public static
Развертывает плоский массив в вложенный массив.
-
extract() public static
Получает значения из массива, соответствующие выражению $path. Выражение пути представляет собой выражение, разделенное точками, которое может содержать набор шаблонов и выражений:
-
filter() public static
Рекурсивно фильтрует набор данных.
-
flatten() public static
Сжимает многомерный массив в одномерный, используя разделительный путь массива для ключа каждого элемента массива, например, [['Foo' => ['Bar' => 'Far']]] становится ['0.Foo.Bar' => 'Far'].)
-
format() public static
Возвращает отформатированную серию значений, извлеченных из
$data, используя$formatв качестве формата и$pathsв качестве значений для извлечения. -
get() public static
Получает одно значение, указанное $path, из $data. Не поддерживает полный набор функций точечной нотации, но быстрее для простых операций чтения.
-
insert() public static
Вставляет $values в массив с заданным $path. Можно использовать элементы
{n}и{s}для вставки $data несколько раз. -
map() public static
Применяет обратный вызов ко всем элементам в наборе. Может быть предоставлен путь для изменения только фрагментов набора.
-
maxDimensions() public static
Подсчитывает размерность всех элементов массива. Полезно для поиска максимального числа измерений в смешанном массиве.
-
merge() public static
Эту функцию можно рассматривать как гибрид между
array_mergeиarray_merge_recursivePHP. -
mergeDiff() public static
Сливает разницу между $data и $compare в $data.
-
nest() public static
Принимает плоский массив и возвращает вложенный массив
-
normalize() public static
Нормализует массив и преобразует его в стандартный формат.
-
numeric() public static
Проверяет, являются ли все значения в массиве числовыми
-
reduce() public static
Сводит набор извлеченных значений, используя
$function. -
remove() public static
Удаляет данные, соответствующие $path, из массива $data. Можно использовать
{n}и{s}для удаления нескольких элементов из $data. -
sort() public static
Сортирует массив по любому значению, определяемому путем, совместимым с Set
Краткое описание методов
_filter() protected static
_filter(mixed $var): bool
Функция обратного вызова для фильтрации.
Parameters
-
mixed$var Массив для фильтрации.
Returns
bool_matchToken() protected static
_matchToken(mixed $key, string $token): bool
Проверка ключа на соответствие токену.
Parameters
-
mixed$key Ключ в массиве, который проверяется.
-
string$token Проверяемый токен.
Returns
bool_matches() protected static
_matches(arrayArrayAccess $data, string $selector): bool
Проверяет, соответствует ли $data шаблонам атрибутов
Parameters
-
arrayArrayAccess$data Массив данных для сравнения.
-
string$selector Шаблоны для сравнения.
Returns
bool_merge() protected static
_merge(array $stack, array $return): void
Вспомогательная функция слияния для уменьшения дублирования кода между merge() и expand().
Parameters
-
array$stack Стек операций для работы.
-
array$return Возвращаемое значение для работы.
Returns
void_simpleOp() protected static
_simpleOp(string $op, array $data, string[] $path, mixed $values = null): array
Выполняет простую операцию вставки/удаления.
Parameters
-
string$op Операция для выполнения.
-
array$data Данные для работы.
-
string[]$path Путь для работы.
-
mixed$values optional Значения для вставки при выполнении вставок.
Returns
array_splitConditions() protected static
_splitConditions(string $token): array
Разделение условий токена
Parameters
-
string$token Разделяемый токен.
Returns
array_squash() protected static
_squash(array $data, mixed $key = null): array
Вспомогательный метод для sort() Сжимает массив в один хэш, чтобы его можно было отсортировать.
Parameters
-
array$data Данные для сжатия.
-
mixed$key optional Ключ для данных.
Returns
arrayapply() public static
apply(array $data, string $path, callable $function): mixed
Применить функцию обратного вызова к набору извлеченных значений с использованием $function. Функция получит извлеченные значения в качестве первого аргумента.
Example
Вы можете легко подсчитать результаты извлечения с помощью apply(). Например, чтобы подсчитать комментарии к статье:
$count = Hash::apply($data, 'Article.Comment.{n}', 'count'); Вы также можете использовать функцию, подобную array_sum, чтобы суммировать результаты.
$total = Hash::apply($data, '{n}.Item.price', 'array_sum'); Parameters
-
array$data Данные для сокращения.
-
string$path Путь для извлечения из $data.
-
callable$function Функция, вызываемая для каждого извлеченного значения.
Returns
mixedLinks
check() public static
check(array $data, string $path): bool
Проверить, существует ли данный путь в $data. Этот метод использует тот же синтаксис пути, что и Hash::extract()
Проверка путей, которые могут указывать на более чем один элемент, гарантирует, что существует хотя бы один совпадающий элемент.
Parameters
-
array$data Данные для проверки.
-
string$path Путь для проверки.
Returns
boolSee Also
Links
combine() public static
combine(array $data, string|string[]|null $keyPath, string|string[]|null $valuePath = null, string|null $groupPath = null): array
Создает ассоциативный массив, используя $keyPath в качестве пути для построения ключей и, необязательно, $valuePath в качестве пути для получения значений. Если $valuePath не указан, все значения будут инициализированы как null (полезно для Hash::merge). Вы можете опционально сгруппировать значения по тому, что получается при следовании пути, указанному в $groupPath.
Parameters
-
array$data Массив, из которого извлекаются ключи и значения
-
string|string[]|null$keyPath Строка, разделенная точками.
-
string|string[]|null$valuePath optional Строка, разделенная точками.
-
string|null$groupPath optional Строка, разделенная точками.
Returns
arrayThrows
RuntimeExceptionКогда количество ключей и значений не совпадает.
Links
contains() public static
contains(array $data, array $needle): bool
Определяет, содержит ли один массив точно такие же ключи и значения, как другой.
Parameters
-
array$data Данные для поиска.
-
array$needle Значения для поиска в $data
Returns
boolLinks
diff() public static
diff(array $data, array $compare): array
Вычисляет разницу между двумя сложными массивами. Этот метод отличается от встроенной функции array_diff() тем, что он сохраняет ключи и работает с многомерными массивами.
Parameters
-
array$data Первое значение
-
array$compare Второе значение
Returns
arrayLinks
dimensions() public static
dimensions(array $data): int
Подсчитывает размерность массива. Учитывает только размерность первого элемента массива.
Если у вас неравномерный или неоднородный массив, рассмотрите возможность использования Hash::maxDimensions() для получения размерности массива.
Parameters
-
array$data Массив для подсчета размерностей
Returns
intLinks
expand() public static
expand(array $data, string $separator = '.'): array
Развертывает плоский массив в вложенный массив.
Например, развертывает массив, который был свернут с помощью Hash::flatten(), в многомерный массив. Таким образом, ['0.Foo.Bar' => 'Far'] становится [['Foo' => ['Bar' => 'Far']]].
Parameters
-
array$data Сжатый массив
-
string$separator optional Используемый разделитель
Returns
arrayLinks
extract() public static
extract(arrayArrayAccess $data, string $path): arrayArrayAccess
Получает значения из массива, соответствующие выражению $path. Выражение пути представляет собой выражение, разделенное точками, которое может содержать набор шаблонов и выражений:
-
{n}Соответствует любому числовому ключу или целому числу. -
{s}Соответствует любому ключу строки. -
{*}Соответствует любому значению. -
FooСоответствует любому ключу с точно таким же значением.
Существует ряд операторов атрибутов:
-
=,!=Равенство.-
>,<,>=,<=Сравнение значений. -
=/.../Сопоставление по шаблону регулярных выражений.
-
Учитывая набор данных массива User из вызова $usersTable->find('all'):
-
1.User.nameПолучить имя пользователя с индексом 1. -
{n}.User.nameПолучить имя каждого пользователя в наборе пользователей. -
{n}.User[id].nameПолучить имя каждого пользователя с ключом id. -
{n}.User[id>=2].nameПолучить имя каждого пользователя с ключом id больше или равным 2. -
{n}.User[username=/^paul/]Получить элементы User с именем пользователя, соответствующим^paul. -
{n}.User[id=1].nameПолучить имя пользователя с id, соответствующим1.
Параметры
-
arrayArrayAccess$data Данные, из которых нужно извлечь информацию.
-
string$path Путь для извлечения.
Возвращает
arrayArrayAccessСсылки
filter() public static
filter(array $data, callable|array $callback = ['self', '_filter']): array
Рекурсивно фильтрует набор данных.
Параметры
-
array$data Массив для фильтрации или значение, когда используется обратный вызов.
-
callable|array$callback optional Функция для фильтрации данных. По умолчанию
static::_filter(), которая удаляет все нулевые пустые значения.
Возвращает
arrayСсылки
flatten() public static
flatten(array $data, string $separator = '.'): array
Сжимает многомерный массив в одномерный, используя разделитель пути массива для ключа каждого элемента массива, т. е. [['Foo' => ['Bar' => 'Far']]] становится ['0.Foo.Bar' => 'Far'].)
Параметры
-
array$data Массив для сжатия.
-
string$separator optional Строка, используемая для разделения элементов ключа массива в пути, по умолчанию '.'.
Возвращает
arrayСсылки
format() public static
format(array $data, string[] $paths, string $format): string[]|null
Возвращает отформатированный ряд значений, извлеченных из $data, используя $format в качестве формата и $paths в качестве значений для извлечения.
Использование:
$result = Hash::format($users, ['{n}.User.id', '{n}.User.name'], '%s : %s'); Строка $format может использовать любые параметры форматирования, которые поддерживают vsprintf() и sprintf().
Параметры
-
array$data Исходный массив, из которого извлекаются данные.
-
string[]$paths Массив, содержащий один или несколько путей ключей в стиле Hash::extract()
-
string$format Строка формата, в которую будут вставлены значения, см. sprintf()
Возвращает
string[]|nullСм. также
\Cake\Utility\Hash::extract()
Ссылки
get() public static
get(arrayArrayAccess $data, string|int|string[]|null $path, mixed $default = null): mixed
Получает одно значение, указанное $path из $data. Не поддерживает полный набор функций точечной нотации, но быстрее для простых операций чтения.
Параметры
-
arrayArrayAccess$data Массив данных или объект, реализующий интерфейс \ArrayAccess для работы.
-
string|int|string[]|null$path Искомый путь. Либо строка, разделенная точками, либо массив сегментов пути.
-
mixed$default optional Возвращаемое значение, когда путь не существует.
Возвращает
mixedВызывает исключение
InvalidArgumentExceptionСсылки
insert() public static
insert(array $data, string $path, mixed $values = null): array
Вставляет $values в массив по указанному $path. Вы можете использовать элементы {n} и {s} для вставки $data несколько раз.
Параметры
-
array$data Данные для вставки.
-
string$path Путь для вставки.
-
mixed$values optional Значения для вставки.
Возвращает
arrayСсылки
map() public static
map(array $data, string $path, callable $function): array
Применяет обратный вызов ко всем элементам в наборе. Может быть предоставлен путь для изменения только частей набора.
Параметры
-
array$data Данные, для которых выполняется сопоставление и извлечение данных.
-
string$path Путь для извлечения для сопоставления.
-
callable$function Функция, вызываемая для каждого извлеченного значения.
Возвращает
arrayСсылки
maxDimensions() public static
maxDimensions(array $data): int
Подсчитывает размерности всех элементов массива. Полезно для нахождения максимального количества измерений в смешанном массиве.
Параметры
-
array$data Массив, для которого подсчитываются размерности.
Возвращает
intСсылки
merge() public static
merge(array $data, mixed $merge): array
Эту функцию можно рассматривать как гибрид между array_merge и array_merge_recursive PHP.
Разница между этим методом и встроенными методами заключается в том, что если ключ массива содержит другой массив, то Hash::merge() будет работать рекурсивно (в отличие от array_merge). Но он не будет работать рекурсивно для ключей, содержащих скалярные значения (в отличие от array_merge_recursive).
Эта функция будет работать с неограниченным количеством аргументов и преобразует не являющиеся массивами параметры в массивы.
Параметры
-
array$data Массив, который нужно объединить.
-
mixed$merge Массив для слияния. Аргумент и все последующие аргументы будут преобразованы в массивы при слиянии.
Возвращает
arrayСсылки
mergeDiff() public static
mergeDiff(array $data, array $compare): array
Объединяет разницу между $data и $compare в $data.
Параметры
-
array$data Данные, к которым нужно добавить.
-
array$compare Данные для сравнения и добавления.
Возвращает
arrayСсылки
nest() public static
nest(array $data, array $options = []): array[]
Принимает плоский массив и возвращает вложенный массив
Options:
-
childrenИмя ключа, которое нужно использовать в результирующем наборе для дочерних элементов. -
idPathПуть к ключу, который идентифицирует каждую запись. Должен быть совместим с Hash::extract(). По умолчанию{n}.$alias.id -
parentPathПуть к ключу, который идентифицирует родителя каждой записи. Должен быть совместим с Hash::extract(). По умолчанию{n}.$alias.parent_id -
rootИдентификатор желаемого самого верхнего результата.
Parameters
-
array$data Данные для вложения.
-
array$options optional Параметры:
Returns
array[]Throws
InvalidArgumentExceptionПри предоставлении неверных данных.
See Also
Links
normalize() public static
normalize(array $data, bool $assoc = true): array
Нормализует массив и преобразует его в стандартный формат.
Parameters
-
array$data Список для нормализации
-
bool$assoc optional Если true, $data будет преобразован в ассоциативный массив.
Returns
arrayLinks
numeric() public static
numeric(array $data): bool
Проверяет, являются ли все значения в массиве числовыми
Parameters
-
array$data Массив для проверки.
Returns
boolLinks
reduce() public static
reduce(array $data, string $path, callable $function): mixed
Сокращает набор извлеченных значений, используя $function.
Parameters
-
array$data Данные для сокращения.
-
string$path Путь для извлечения из $data.
-
callable$function Функция, вызываемая для каждого извлеченного значения.
Returns
mixedLinks
remove() public static
remove(array $data, string $path): array
Удаляет данные, соответствующие $path, из массива $data. Вы можете использовать {n} и {s} для удаления нескольких элементов из $data.
Parameters
-
array$data Данные для обработки
-
string$path Выражение пути для использования при удалении.
Returns
arrayLinks
sort() public static
sort(array $data, string $path, string|int $dir = 'asc', array|string $type = 'regular'): array
Сортирует массив по любому значению, определяемому путем, совместимым с Set
Sort directions
-
ascили \SORT_ASC Сортировка по возрастанию. -
descили \SORT_DESC Сортировка по убыванию.
Sort types
-
regularДля обычной сортировки (не изменять типы) -
numericСравнение значений как чисел -
stringСравнение значений как строк -
localeСравнение элементов как строк на основе текущей локали -
naturalСравнение элементов как строк, используя «естественный порядок» в удобном для человека виде. Например, foo10 будет отсортирован ниже foo2.
Для сортировки без учета регистра передайте тип в виде массива следующим образом:
Hash::sort($data, 'some.attribute', 'asc', ['type' => 'regular', 'ignoreCase' => true]);
При использовании формы массива, type по умолчанию равно 'regular'. Параметр ignoreCase по умолчанию равен false.
Parameters
-
array$data Массив данных для сортировки
-
string$path Путь, совместимый с Set, к значению массива
-
string|int$dir optional См. направления выше. По умолчанию 'asc'.
-
array|string$type optional См. типы направлений выше. По умолчанию 'regular'.
Returns
arrayLinks
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/4.2/class-Cake.Utility.Hash.html