Download the PHP package smskin/math without Composer
On this page you can find all versions of the php package smskin/math. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package math
Math library
This library used on project Wedding Expert (https://www.wed-expert.com). Данная библиотека используется в сервисе Свадебный эксперт (https://www.wed-expert.com).
For install by composer run:
Для установки библиотеки:
composer require smskin/math
Combinatorics
A package that returns all the combinations and permutations, without repitition, of a given set and subset size. Associative arrays are preserved.
Script based on library Math_Combinatorics with some changes.
URL of original library http://pyrus.sourceforge.net/Math_Combinatorics.html
Данная библиотека возвращает все возможные уникальные комбинации и перемещения последовательностей элементов массива. Библиотека базируется на скрипте Math_Combinatorics с некоторыми изменениями. URL оригинальной библиотеки: http://pyrus.sourceforge.net/Math_Combinatorics.html
Пример использования:
Мне требовалось прописать мета теги для SEO с правилами для фильтров каталога.
-
При указании минимального среднего чека в фильтре - подставляется Title "Недорогие рестораны".
- При указании минимального среднего чека + указании типа события "Ресторан" - генерировался Title "Недорогие рестораны на свадьбу".
Проблема возникла в тот момент, когда типов событий стало слишком много и потребовалось использовать маску для генерации (?check=1&type=*). Необходимо было налету быстро проверять наличие данных правил в таблице SEO и генерировать мета теги.
Соответственно приняли решение:
- Разбираем GET параметры на элементы массива
- Обрабатываем параметры с помощью метода combinations с заменой каждого элемента на *
- Получаем набор всех возможных масок запросов, которые мог бы сгенерировать SEO-шник. В лоб это не решить, т.к. может быть прописано правило из 10 фильтров, 5 из которых является * (any).
- Получившийся массив прогоняем одним запросом
- Профит
Результат:
- Страница ресторанов без фильтра: https://msk.wed-expert.com/categories/restaurants-and-cafes
- Страница ресторанов с фильтром минимального среднего чека: https://msk.wed-expert.com/categories/restaurants-and-cafes?average_check=0
-
Страница ресторанов с фильтрами минимального среднего чека и (any) для фильтра события https://msk.wed-expert.com/categories/restaurants-and-cafes?average_check=0&event=1
Methods:
combinations(array $set, $subsetSize = null)
Find all combinations given a set and a subset size. Ищет все комбинации элементов массива в рамках ограничения количества элементов в результате ($subsetSize
).permutations(array $set, $subsetSize = null)
Find all permutations given a set and a subset size.
Ищет все возможные перемещения элементов массива в рамках ограничения количества элементов в результате ($subsetSize
).
Examples:
Example script you can find in path '/examples/Combinatorics.php'.
// Example of method combinations(); // We want get all combinations of $data array for 2 elements in combination.
$instance = new MathCombinatorics(); $data = ['a1'=>1,'a2'=>2,'a3'=>3]; $subsetSize = 2; $result = $instance->combinations($data,$subsetSize); print_r($result); / Result data:
[
[
'a1'=>1, 'a2'=>2
], [ 'a1'=>1, 'a3'=>3 ], [ 'a2'=>2, 'a3'=>3 ] ];
/// Example of method permutations();
// We want get all permutations of $data array for 2 elements.$instance = new MathCombinatorics(); $data = ['a1'=>1,'a2'=>2,'a3'=>3]; $subsetSize = 2; $result = $instance->permutations($data,$subsetSize); print_r($result); / Result data: [
[ 'a1'=>1, 'a2'=>2 ], [ 'a2'=>2, 'a1'=>1 ], [ 'a1'=>1, 'a3'=>3 ], [ 'a3'=>3, 'a1'=>1 ], [ 'a2'=>2, 'a3'=>3 ], [ 'a3'=>3, 'a2'=>2 ] ]; /