smskin / math
0.0.1
2018-10-24 15:33 UTC
Requires (Dev)
- phpunit/phpunit: ^7.4
This package is auto-updated.
Last update: 2024-09-05 19:40:55 UTC
README
此库用于项目婚礼专家(https://www.wed-expert.com)。该库在服务婚礼专家(https://www.wed-expert.com)中使用。
通过Composer安装运行
安装此库
composer require smskin/math
组合数学
一个返回给定集合和子集大小的所有组合和排列(不重复)的包。关联数组被保留。
基于Math_Combinatorics库的脚本,并进行了一些修改。
原始库的URL http://pyrus.sourceforge.net/Math_Combinatorics.html
该库返回数组元素的所有可能的唯一组合和排列。该库基于Math_Combinatorics脚本,并进行了一些修改。原始库的URL: http://pyrus.sourceforge.net/Math_Combinatorics.html
使用示例
我需要为SEO编写元标签,并设置目录筛选规则。
-
在筛选器中指定最小平均账单金额时,将标题设置为“便宜餐厅”。
-
在指定最小平均账单金额并指定事件类型“餐厅”时,将标题生成为“便宜餐厅适合婚礼”。
当事件类型变得太多,需要使用掩码生成(?check=1&type=*)时,问题就出现了。需要迅速检查SEO表中是否存在这些规则并生成元标签。
因此,我们采取了以下措施
- 解析GET参数为数组元素
- 使用方法combinations处理参数,将每个元素替换为*
- 获取所有可能的查询掩码集,这些掩码可以生成SEO标签。直接解决此问题是不可能的,因为可能已经编写了包含10个筛选器的规则,其中5个是*(任意)。
- 将得到的数组通过一个查询处理
- 好处
结果
- 无筛选器的餐厅页面: https://msk.wed-expert.com/categories/restaurants-and-cafes
- 有最低平均账单金额筛选器的餐厅页面: https://msk.wed-expert.com/categories/restaurants-and-cafes?average_check=0
- 有最低平均账单金额和(任意)事件筛选器的餐厅页面: https://msk.wed-expert.com/categories/restaurants-and-cafes?average_check=0&event=1
方法
combinations(array $set, $subsetSize = null)
在给定的集合和子集大小内查找所有组合。在结果中限制元素数量($subsetSize
)。permutations(array $set, $subsetSize = null)
在给定的集合和子集大小内查找所有排列。
在结果中限制元素数量($subsetSize
)内查找所有可能的元素移动。
示例
示例脚本可以在路径'/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
]
];
*/