Класс Hash
Библиотека функций для массивов для обработки и извлечения данных из массивов или 'наборов' данных.
Hash предоставляет улучшенный интерфейс, более согласованный и предсказуемый набор функций по сравнению с Set. Хотя он не поддерживает частично псевдо Xpath, его более полное свойство записи с точкой предоставляет аналогичные функции в более согласованной реализации.
Краткое описание методов
-
_filter() protected static
Функция обратного вызова для фильтрации.
-
_matchToken() protected static
Проверка ключа на соответствие токену.
-
_matches() protected static
Проверка, соответствует ли $data шаблонам атрибутов
-
_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
Эта функция может быть представлена как гибрид между PHP's
array_mergeиarray_merge_recursive. -
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
Функция обратного вызова для фильтрации.
Параметры
-
mixed$var Массив для фильтрации.
Возвращает
bool_matchToken() protected static
_matchToken(mixed $key, string $token): bool
Проверка ключа на соответствие токену.
Параметры
-
mixed$key Ключ в массиве, который ищется.
-
string$token Токен, на который проверяется соответствие.
Возвращает
bool_matches() protected static
_matches(ArrayAccess|array $data, string $selector): bool
Проверка, соответствует ли $data шаблонам атрибутов
Параметры
-
ArrayAccess|array$data Массив данных для проверки соответствия.
-
string$selector Шаблоны для проверки соответствия.
Возвращает
bool_merge() protected static
_merge(array $stack, array $return): void
Вспомогательная функция для слияния, предназначенная для уменьшения дублирования кода между merge() и expand().
Параметры
-
array$stack Стек операций, с которыми нужно работать.
-
array$return Значение, с которым нужно работать.
Возвращает
void_simpleOp() protected static
_simpleOp(string $op, array $data, array<string> $path, mixed $values = null): array
Выполнение простой операции вставки/удаления.
Параметры
-
string$op Операция, которую нужно выполнить.
-
array$data Данные, с которыми нужно работать.
-
array<string>$path Путь, с которым нужно работать.
-
mixed$values optional Значения для вставки при выполнении операции вставки.
Возвращает
array_splitConditions() protected static
_splitConditions(string $token): array
Разделение условий токена
Параметры
-
string$token разделяемый токен.
Возвращает
array_squash() protected static
_squash(array $data, mixed $key = null): array
Вспомогательный метод для sort(). Сжимает массив в один хэш, чтобы его можно было отсортировать.
Параметры
-
array$data Данные для сжатия.
-
mixed$key optional Ключ для данных.
Возвращает
arrayapply() public static
apply(array $data, string $path, callable $function): mixed
Применение функции обратного вызова к набору извлеченных значений с помощью $function. Функция получит извлеченные значения в качестве первого аргумента.
Пример
Вы можете легко подсчитать результаты извлечения с помощью apply(). Например, для подсчета комментариев к статье:
$count = Hash::apply($data, 'Article.Comment.{n}', 'count'); Вы также можете использовать функцию, такую как array_sum для суммирования результатов.
$total = Hash::apply($data, '{n}.Item.price', 'array_sum'); Параметры
-
array$data Данные для уменьшения.
-
string$path Путь для извлечения из $data.
-
callable$function Функция, которая будет вызвана для каждого извлеченного значения.
Возвращает
mixedСсылки
check() public static
check(array $data, string $path): bool
Проверка наличия заданного пути в $data. Этот метод использует тот же синтаксис пути, что и Hash::extract().
Проверка путей, которые могут указывать на более чем один элемент, гарантирует, что существует хотя бы один соответствующий элемент.
Параметры
-
array$data Данные для проверки.
-
string$path Путь для проверки.
Возвращает
boolСм. также
Ссылки
combine() public static
combine(array $data, array<string>|string|null $keyPath, array<string>|string|null $valuePath = null, string|null $groupPath = null): array
Создает ассоциативный массив, используя $keyPath в качестве пути для построения ключей и необязательно $valuePath в качестве пути для получения значений. Если $valuePath не указан, все значения будут инициализированы как null (полезно для Hash::merge). Можно необязательно сгруппировать значения по результатам следования пути, указанного в $groupPath.
Параметры
-
array$data Массив, из которого извлекаются ключи и значения
-
array<string>|string|null$keyPath Строка с точками.
-
array<string>|string|null$valuePath optional Строка с точками.
-
string|null$groupPath optional Строка с точками.
Возвращает
arrayИсключения
RuntimeExceptionПри неравном количестве ключей и значений.
Ссылки
contains() public static
contains(array $data, array $needle): bool
Определяет, содержит ли один массив точные ключи и значения другого.
Параметры
-
array$data Данные для поиска.
-
array$needle Значения для поиска в $data
Возвращает
boolСсылки
diff() public static
diff(array $data, array $compare): array
Вычисляет разницу между двумя сложными массивами. Этот метод отличается от встроенной функции array_diff() тем, что сохраняет ключи и работает с многомерными массивами.
Параметры
-
array$data Первое значение
-
array$compare Второе значение
Возвращает
arrayСсылки
dimensions() public static
dimensions(array $data): int
Подсчитывает размерности массива. Учитывает только размерность первого элемента массива.
Если у вас неравномерный или неоднородный массив, рассмотрите использование Hash::maxDimensions() для получения размерностей массива.
Параметры
-
array$data Массив для подсчета размерностей.
Возвращает
intСсылки
expand() public static
expand(array $data, string $separator = '.'): array
Развертывает плоский массив в вложенный массив.
Например, делает плоский массив, который был свернут с помощью Hash::flatten() в многомерный массив. Таким образом, ['0.Foo.Bar' => 'Far'] становится [['Foo' => ['Bar' => 'Far']]].
Параметры
-
array$data Плоский массив
-
string$separator optional Разделитель, используемый.
Возвращает
arrayСсылки
extract() public static
extract(ArrayAccess|array $data, string $path): ArrayAccess|array
Получает значения из массива, соответствующие выражению $path. Выражение пути — это выражение, разделенное точками, которое может содержать набор шаблонов и выражений:
-
{n}Соответствует любому числовому ключу или целому числу. -
{s}Соответствует любому строковому ключу. -
{*}Соответствует любому значению. -
FooСоответствует любому ключу с точно таким же значением.
Существует ряд операторов атрибутов:
-
=,!=Равенство.-
>,<,>=,<=Сравнение значений. -
=/.../Сопоставление с образцом регулярного выражения.
-
Приведены примеры с данными массива пользователей, полученными из $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/]Получить элементы пользователя с именем пользователя, соответствующим^paul. -
{n}.User[id=1].nameПолучить имя пользователя с id, соответствующим1.
Параметры
-
ArrayAccess|array$data Данные, из которых необходимо извлечь информацию.
-
string$path Путь для извлечения.
Возвращает
ArrayAccess|arrayСсылки
filter() public static
filter(array $data, callable|array $callback = [Hash::class, '_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, array<string> $paths, string $format): array<string>|null
Возвращает отформатированный ряд значений, извлеченных из $data, используя $format в качестве формата и $paths в качестве значений для извлечения.
Использование:
$result = Hash::format($users, ['{n}.User.id', '{n}.User.name'], '%s : %s'); Строка $format может использовать любые параметры форматирования, которые поддерживают vsprintf() и sprintf().
Параметры
-
array$data Исходный массив для извлечения данных.
-
array<string>$paths Массив, содержащий один или несколько путей ключей в стиле Hash::extract().
-
string$format Строка формата, в которую будут вставлены значения, см. sprintf().
Возвращает
array<string>|nullСм. также
\Cake\Utility\Hash::extract()
Ссылки
get() public static
get(ArrayAccess|array $data, array<string>|string|int|null $path, mixed $default = null): mixed
Получает одно значение, указанное в $path, из $data. Не поддерживает полную функциональность записи с точками, но быстрее при простых операциях чтения.
Параметры
-
ArrayAccess|array$data Массив данных или объект, реализующий интерфейс \ArrayAccess, для работы.
-
array<string>|string|int|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
Эта функция может быть охарактеризована как гибрид между PHP's array_merge и array_merge_recursive.
Различие между этим методом и встроенными заключается в том, что если ключ массива содержит другой массив, то 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<string, mixed> $options = []): array<array>
Принимает плоский массив и возвращает вложенный массив
Параметры:
-
childrenИмя ключа, используемого в результирующем наборе для дочерних элементов. -
idPathПуть к ключу, идентифицирующему каждый элемент. Должен быть совместим с Hash::extract(). По умолчанию{n}.$alias.id -
parentPathПуть к ключу, идентифицирующему родительский элемент каждого. Должен быть совместим с Hash::extract(). По умолчанию{n}.$alias.parent_id -
rootИдентификатор желаемого верхнего элемента результата.
Параметры
-
array$data Данные для вложения.
-
array<string, mixed>$options optional Параметры:
Возвращает
array<array>Исключения
InvalidArgumentExceptionПри предоставлении неверных данных.
См. также
Ссылки
normalize() public static
normalize(array $data, bool $assoc = true): array
Нормализует массив и преобразует его в стандартный формат.
Параметры
-
array$data Список для нормализации
-
bool$assoc optional Если true, $data будет преобразован в ассоциативный массив.
Возвращает
arrayСсылки
numeric() public static
numeric(array $data): bool
Проверяет, являются ли все значения в массиве числовыми.
Параметры
-
array$data Проверяемый массив.
Возвращает
boolСсылки
reduce() public static
reduce(array $data, string $path, callable $function): mixed
Сокращает набор извлеченных значений, используя $function.
Параметры
-
array$data Данные для сокращения.
-
string$path Путь для извлечения из $data.
-
callable$function Функция, которая вызывается для каждого извлеченного значения.
Возвращает
mixedСсылки
remove() public static
remove(array $data, string $path): array
Удаляет данные, соответствующие $path, из массива $data. Можно использовать {n} и {s} для удаления нескольких элементов из $data.
Параметры
-
array$data Данные для обработки
-
string$path Выражение пути для удаления.
Возвращает
arrayСсылки
sort() public static
sort(array $data, string $path, string|int $dir = 'asc', array<string, mixed>|string $type = 'regular'): array
Сортирует массив по любому значению, определяемому совместимым с Set путем.
Направления сортировки
-
ascили \SORT_ASC Сортировка по возрастанию. -
descили \SORT_DESC Сортировка по убыванию.
Типы сортировки
-
regularДля обычной сортировки (не изменяйте типы) -
numericСравнение значений численно -
stringСравнение значений как строк -
localeСравнение элементов как строк, основываясь на текущем языке -
naturalСравнение элементов как строк, используя "естественный порядок" удобным для человека способом. Например, отсортирует foo10 ниже foo2.
Для выполнения регистронезависимой сортировки передайте тип в виде массива следующим образом:
Hash::sort($data, 'some.attribute', 'asc', ['type' => 'regular', 'ignoreCase' => true]);
При использовании массива, type по умолчанию равен 'обычный'. Параметр ignoreCase по умолчанию равен false.
Параметры
-
array$data Массив данных для сортировки
-
string$path Путь к значению массива, совместимый с Set
-
string|int$dir optional См. направления выше. По умолчанию 'восходящий'.
-
array<string, mixed>|string$type optional См. типы направлений выше. По умолчанию 'обычный'.
Возвращает
arrayСсылки
© 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.3/class-Cake.Utility.Hash.html