Класс Hash
Библиотека функций для массивов, предназначенная для манипулирования и извлечения данных из массивов или наборов данных.
Hash предоставляет улучшенный интерфейс, более последовательный и предсказуемый набор функций по сравнению с Set. Несмотря на отсутствие точечной поддержки псевдо-XPath, более полная нотация с точкой обеспечивает аналогичные возможности с более последовательной реализацией.
Ссылка: https://book.cakephp.org/3.0/ru/core-libraries/hash.html
Расположение: Utility/Hash.php
Краткое описание методов
- Функция обратного вызова для фильтрации.
- Проверка ключа на соответствие токену.
- Проверяет, соответствует ли $data шаблонам атрибутов
- Функция-помощник для слияния, предназначенная для сокращения дублирования кода между merge() и expand().
- Выполнение простого вставки/удаления.
- Разделение условий токена
-
Вспомогательный метод для sort(). Сжимает массив до одного хеша, чтобы его можно было отсортировать.
-
Применение функции обратного вызова к набору извлечённых значений с использованием
$function. Функция получит извлечённые значения в качестве первого аргумента. -
Проверка наличия заданного пути в $data. Этот метод использует тот же синтаксис пути, что и Hash::extract().
-
Создаёт ассоциативный массив, используя
$keyPathв качестве пути для построения ключей и необязательно$valuePathв качестве пути для получения значений. Если$valuePathне указан, все значения будут инициализированы как null (полезно для Hash::merge). Необязательно можно сгруппировать значения по тому, что получено при следовании пути, указанному в$groupPath. - Определяет, содержит ли один массив точные ключи и значения другого.
-
Вычисляет разницу между двумя сложными массивами. Этот метод отличается от встроенной функции array_diff() тем, что сохраняет ключи и работает с многомерными массивами.
-
Подсчитывает размерности массива. Учитывается только размерность первого элемента в массиве.
- Расширяет плоский массив вложенным массивом.
-
Получает значения из массива, соответствующие выражению $path. Выражение пути — это выражение, разделённое точками, которое может содержать набор шаблонов и выражений:
- Рекурсивно фильтрует набор данных.
-
Сжимает многомерный массив до одного измерения, используя путь к массиву, разделённый разделителем, для каждого ключа элемента массива, т.е. [['Foo' => ['Bar' => 'Far']]] становится ['0.Foo.Bar' => 'Far'].)
-
Возвращает отформатированный ряд значений, извлечённых из
$data, используя$formatв качестве формата и$pathsв качестве значений для извлечения. -
Получает единственное значение, заданное $path из $data. Не поддерживает полный набор функций нотации с точкой, но быстрее для простых операций чтения.
-
Вставляет $values в массив с заданным $path. Можно использовать элементы
{n}и{s}для многократной вставки $data. -
Применяет функцию обратного вызова ко всем элементам в наборе. Можно указать путь, чтобы модифицировать только части набора.
-
Подсчитывает размерности всех элементов массива. Полезно для определения максимального количества размерностей в смешанном массиве.
- Эта функция может быть рассмотрена как гибрид между PHP's
array_mergeиarray_merge_recursive. - Сливает разницу между $data и $compare в $data.
- Принимает плоский массив и возвращает вложенный массив
- Нормализует массив и преобразует его в стандартный формат.
- Проверяет, являются ли все значения в массиве числовыми
- Сводит набор извлечённых значений с использованием
$function. -
Удаляет данные, соответствующие $path из массива $data. Можно использовать
{n}и{s}для удаления нескольких элементов из $data. - Сортирует массив по любому значению, определяемому совместимым с Set путём
Подробное описание методов
_filter()source защищённый статический
_filter( mixed $var )
Функция обратного вызова для фильтрации.
Параметры
- смешанный
$var - Массив для фильтрации.
Возвращает
boolean_matchToken()source защищённый статический
_matchToken( string $key , string $token )
Проверка ключа на соответствие токену.
Параметры
- строка
$key - Ключ в массиве, который ищется.
- строка
$token - Токен, на который проверяется соответствие.
Возвращает
boolean_matches()source защищённый статический
_matches( array|ArrayAccess $data , string $selector )
Проверяет, соответствует ли $data шаблонам атрибутов
Параметры
- массив|ArrayAccess
$data - Массив данных для проверки соответствия.
- строка
$selector - Шаблоны для проверки соответствия.
Возвращает
booleanСоответствие выражению.
_merge()source защищённый статический
_merge( array $stack , array $return )
Функция-помощник для слияния, предназначенная для сокращения дублирования кода между merge() и expand().
Параметры
- массив
$stack - Стек операций, с которыми следует работать.
- массив
$return - Значение возврата для работы.
_simpleOp()source protected static
_simpleOp( string $op , array $data , array $path , mixed $values = null )
Выполнить простое действие вставки/удаления.
Параметры
- строка
$op - Действие для выполнения.
- массив
$data - Данные для обработки.
- массив
$path - Путь для обработки.
- смешанный
$valuesнеобязательно null - Значения для вставки при выполнении вставки.
Возвращает
массивданные.
_splitConditions()source protected static
_splitConditions( string $token )
Разделить условия токена.
Параметры
- строка
$token - Токен, который разделялся.
Возвращает
массив[токен, условия] с разделенным токеном
_squash()source protected static
_squash( array $data , string|null $key = null )
Вспомогательный метод для sort(). Сжимает массив в один хэш, чтобы его можно было отсортировать.
Параметры
- массив
$data - Данные для сжатия.
- строка|null
$keyнеобязательно null - Ключ для данных.
Возвращает
массивapply()source public static
apply( array $data , string $path , callable $function )
Применяет обратный вызов к набору извлеченных значений с помощью $function. Функция получит извлеченные значения в качестве первого аргумента.
Пример
Вы легко можете подсчитать результаты извлечения с помощью apply(). Например, для подсчета комментариев к статье:
$count = Hash::apply($data, 'Article.Comment.{n}', 'count'); Вы также можете использовать функцию, такую как array_sum, для суммирования результатов.
$total = Hash::apply($data, '{n}.Item.price', 'array_sum'); Параметры
- массив
$data - Данные для уменьшения.
- строка
$path - Путь для извлечения из $data.
- вызываемый
$function - Функция для вызова для каждого извлеченного значения.
Возвращает
смешанныйРезультаты примененного метода.
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::applycheck()source public static
check( array $data , string $path )
Проверяет, существует ли заданный путь в $data. Этот метод использует ту же синтаксическую конструкцию пути, что и Hash::extract()
Проверка путей, которые могут указывать на более чем один элемент, гарантирует, что существует хотя бы один соответствующий элемент.
Параметры
- массив
$data - Данные для проверки.
- строка
$path - Путь для проверки.
Возвращает
логическое значениеСуществование пути.
См. также
\Cake\Utility\Hash::extract()Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::checkcombine()source public static
combine( array $data , string $keyPath , string|null $valuePath = null , string|null $groupPath = null )
Создает ассоциативный массив, используя $keyPath в качестве пути для построения его ключей и, необязательно, $valuePath в качестве пути для получения значений. Если $valuePath не указан, все значения будут инициализированы как null (полезно для Hash::merge). Вы можете, по желанию, группировать значения по тому, что получается при следованию пути, указанному в $groupPath.
Параметры
- массив
$data - Массив, из которого нужно извлечь ключи и значения
- строка
$keyPath - Строка, разделенная точками.
- строка|null
$valuePathнеобязательно null - Строка, разделенная точками.
- строка|null
$groupPathнеобязательно null - Строка, разделенная точками.
Возвращает
массивОбъединенный массив
Исключения
RuntimeExceptionПри несовпадении количества ключей и значений.
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::combinecontains()source public static
contains( array $data , array $needle )
Определяет, содержит ли один массив точные ключи и значения другого.
Параметры
- массив
$data - Данные, по которым выполняется поиск.
- массив
$needle - Значения для поиска в $data
Возвращает
логическое значениеtrue, если $data содержит $needle, иначе false
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::containsdiff()source public static
diff( array $data , array $compare )
Вычисляет разницу между двумя сложными массивами. Этот метод отличается от встроенного array_diff() тем, что сохраняет ключи и работает со многомерными массивами.
Параметры
- массив
$data - Первое значение
- массив
$compare - Второе значение
Возвращает
массивВозвращает пары ключ => значение, которые не являются общими в $data и $compare. Выражение для этой функции: ($data - $compare) + ($compare - ($data - $compare))
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::diffdimensions()source public static
dimensions( array $data )
Подсчитывает размерности массива. Учитывает только размерность первого элемента массива.
Если у вас неравномерный или неоднородный массив, рассмотрите использование Hash::maxDimensions() для получения размерностей массива.
Параметры
- массив
$data - Массив для подсчета размерностей
Возвращает
целое числоКоличество размерностей в $data
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::dimensionsexpand()source public static
expand( array $data , string $separator = '.' )
Расширяет плоский массив в вложенный массив.
Например, раскладывает массив, который был свёрнут с помощью Hash::flatten(), в многомерный массив. Так, ['0.Foo.Bar' => 'Far'] становится [['Foo' => ['Bar' => 'Far']]].
Параметры
- массив
$data - Плоский массив
- строка
$separatorнеобязательно '.' - Разделитель, используемый
Возвращает
массивСсылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::expandextract()source public static
extract( array|ArrayAccess $data , string $path )
Получает значения из массива, соответствующие выражению $path. Выражение пути — это выражение, разделенное точками, которое может содержать набор шаблонов и выражений:
-
{n}Соответствует любому числовому ключу или целому числу. -
{s}Соответствует любому строковому ключу. -
{*}Соответствует любому значению. -
FooСоответствует любому ключу с точно таким же значением.
Существует ряд операторов атрибутов:
-
=,!=Равенство. -
>,<,>=,<=Сравнение значений. -
=/.../Сопоставление с образцом регулярного выражения.
Предположим набор данных массива Пользователи, полученный из вызова $User->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
$data - Данные, из которых нужно извлечь.
- строка
$path - Путь для извлечения.
Возвращает
массив|ArrayAccessМассив извлеченных значений. Возвращает пустой массив, если совпадений нет.
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::extractfilter()source public static
filter( array $data , callable|array $callback = ['self', '_filter'] )
Рекурсивно фильтрует набор данных.
Параметры
- массив
$data - Массив для фильтрации или значение при использовании обратного вызова
- обратный вызов|массив
$callbackнеобязательный ['self', '_filter'] Функция для фильтрации данных. По умолчанию
static::_filter(), которая удаляет все непустые значения, отличные от нуля.
Возвращает
массивОтфильтрованный массив
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::filterflatten()source public static
flatten( array $data , string $separator = '.' )
Сжимает многомерный массив в одномерный, используя разделитель для пути к элементу массива, т.е. [['Foo' => ['Bar' => 'Far']]] преобразуется в ['0.Foo.Bar' => 'Far'].
Параметры
- массив
$data - Массив для сжатия
- строка
$separatorнеобязательный '.' - Строка, используемая для разделения элементов ключа массива в пути, по умолчанию '.'
Возвращает
массивСсылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::flattenformat()source public static
format( array $data , array $paths , string $format )
Возвращает отформатированный ряд значений, извлеченных из $data, используя $format в качестве формата и $paths в качестве значений для извлечения.
Использование:
$result = Hash::format($users, ['{n}.User.id', '{n}.User.name'], '%s : %s'); Строка $format может использовать любые параметры форматирования, которые поддерживают vsprintf() и sprintf().
Параметры
- массив
$data - Исходный массив, из которого извлекаются данные
- массив
$paths - Массив, содержащий один или несколько путей ключей в стиле Hash::extract()
- строка
$format - Строка формата, в которую будут вставлены значения, см. sprintf()
Возвращает
массив|nullМассив строк, извлеченных из
$path и отформатированных с помощью $formatСсылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::formatСм. также
sprintf()\Cake\Utility\Hash::extract()
get()source public static
get( array|ArrayAccess $data , string|array $path , mixed $default = null )
Получение одного значения, указанного в $path, из $data. Не поддерживает полную функциональность обозначений с точками, но быстрее для простых операций чтения.
Параметры
- массив|ArrayAccess
$data Массив данных или объект, реализующий интерфейс \ArrayAccess, для работы.
- строка|массив
$path Путь, который ищется. Либо строка с разделителями точек, либо массив сегментов пути.
- смешанный
$defaultнеобязательный null - Возвращаемое значение, когда путь не найден
Возвращает
смешанныйИзвлеченное из массива значение или null.
Выбрасывает
InvalidArgumentExceptionСсылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::getinsert()source public static
insert( array $data , string $path , array|null $values = null )
Вставка $values в массив по указанному $path. Можно использовать элементы {n} и {s} для многократной вставки $data.
Параметры
- массив
$data - Данные, которые нужно вставить.
- строка
$path - Путь для вставки.
- массив|null
$valuesнеобязательный null - Значения для вставки.
Возвращает
массивДанные с вставленными $values.
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::insertmap()source public static
map( array $data , string $path , callable $function )
Применение обратного вызова ко всем элементам набора. Можно указать путь, чтобы изменить только фрагменты набора.
Параметры
- массив
$data - Данные, по которым нужно применить отображение, и извлечь данные.
- строка
$path - Путь для извлечения данных для отображения.
- обратный вызов
$function - Функция, которая вызывается для каждого извлеченного значения.
Возвращает
массивМассив измененных значений.
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::mapmaxDimensions()source public static
maxDimensions( array $data )
Подсчитывает размерности всех элементов массива. Полезно для определения максимального числа измерений в смешанном массиве.
Параметры
- массив
$data - Массив для подсчета измерений
Возвращает
целое числоМаксимальное число измерений в $data
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::maxDimensionsmerge()source public static
merge( array $data , mixed $merge )
Эта функция может быть представлена как гибрид между PHP's array_merge и array_merge_recursive.
Разница между этим методом и встроенными методами заключается в том, что если ключ массива содержит другой массив, то Hash::merge() будет работать рекурсивно (в отличие от array_merge). Но он не будет работать рекурсивно для ключей, содержащих скалярные значения (в отличие от array_merge_recursive).
Примечание: эта функция может принимать неограниченное количество аргументов и преобразует не массивы в массивы.
Параметры
- массив
$data - Массив для слияния
- смешанный
$merge - Массив для слияния. Аргумент и все последующие аргументы будут преобразовываться в массивы при слиянии
Возвращает
массивОбъединенный массив
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::mergemergeDiff()source public static
mergeDiff( array $data , array $compare )
Объединяет разницу между $data и $compare в $data.
Параметры
- массив
$data - Данные, которые нужно добавить.
- массив
$compare - Данные для сравнения и добавления.
Возвращает
массивОбъединенный массив.
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::mergeDiffnest()source public static
nest( array $data , array $options = [] )
Преобразует плоский массив в вложенный массив
Параметры:
-
childrenИмя ключа для использования в результате для дочерних элементов. -
idPathПуть к ключу, который идентифицирует каждый элемент. Должен быть совместим с Hash::extract(). По умолчанию{n}.$alias.id -
parentPathПуть к ключу, который идентифицирует родительский элемент каждого элемента. Должен быть совместим с Hash::extract(). По умолчанию{n}.$alias.parent_id -
rootИдентификатор желаемого верхнего результата.
Параметры
- массив
$data - Данные для вложения.
- массив
$optionsнеобязательный [] - Параметры:
Возвращает
массивВложенные результаты
Выбрасывает
InvalidArgumentExceptionПри предоставлении неверных данных.
См. также
\Cake\Utility\Hash::extract()Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::nestnormalize()source public static
normalize( array $data , boolean $assoc = true )
Нормализует массив и преобразует его в стандартный формат.
Параметры
- массив
$data - Список для нормализации
- логическое значение
$assocнеобязательный true - Если true, $data будет преобразован в ассоциативный массив.
Возвращает
массивСсылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::normalizenumeric()source public static
numeric( array $data )
Проверяет, являются ли все значения в массиве числовыми.
Параметры
- массив
$data - Массив для проверки.
Возвращаемое значение
booleantrue, если значения числовые, иначе false
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::numericreduce()source public static
reduce( array $data , string $path , callable $function )
Сводит набор извлеченных значений, используя $function.
Параметры
- массив
$data - Данные для сведения.
- строка
$path - Путь для извлечения из $data.
- вызываемая функция
$function - Функция, которая будет вызвана для каждого извлеченного значения.
Возвращаемое значение
mixedСведенное значение.
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::reduceremove()source public static
remove( array $data , string $path )
Удаляет данные, соответствующие $path, из массива $data. Вы можете использовать {n} и {s} для удаления нескольких элементов из $data.
Параметры
- массив
$data - Данные для обработки.
- строка
$path - Выражение пути для удаления.
Возвращаемое значение
массивИзмененный массив.
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::removesort()source public static
sort( array $data , string $path , string $dir = 'asc' , array|string $type = 'regular' )
Сортирует массив по любому значению, определяемому путем, совместимым с Set.
Направления сортировки
-
ascСортировка по возрастанию. -
descСортировка по убыванию.
Типы сортировки
-
regularДля обычной сортировки (без изменения типов). -
numericСравнение значений в числовом формате. -
stringСравнение значений как строк. -
localeСравнение элементов как строк, основываясь на текущем языке. -
naturalСравнение элементов как строк с использованием "естественного упорядочивания" для удобства восприятия. Пример: отсортирует foo10 ниже foo2.
Для выполнения регистронезависимой сортировки, передайте тип как массив следующим образом:
Hash::sort($data, 'some.attribute', 'asc', ['type' => 'regular', 'ignoreCase' => true]);
При использовании массива, type по умолчанию устанавливается в 'обычный'. Параметр ignoreCase по умолчанию равен false.
Параметры
- массив
$data - Массив данных для сортировки.
- строка
$path - Путь к значению массива, совместимый с Set.
- строка
$dirнеобязательно 'asc' - См. направления выше. По умолчанию 'asc'.
- массив/строка
$typeнеобязательно 'regular' - См. типы направлений выше. По умолчанию 'regular'.
Возвращаемое значение
массивОтсортированный массив данных
Ссылка
https://book.cakephp.org/3.0/ru/core-libraries/hash.html#Cake\Utility\Hash::sort
© 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/3.6/class-Cake.Utility.Hash.html