smskin/math

数学运算

0.0.1 2018-10-24 15:33 UTC

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编写元标签,并设置目录筛选规则。

  1. 在筛选器中指定最小平均账单金额时,将标题设置为“便宜餐厅”。

  2. 在指定最小平均账单金额并指定事件类型“餐厅”时,将标题生成为“便宜餐厅适合婚礼”。

当事件类型变得太多,需要使用掩码生成(?check=1&type=*)时,问题就出现了。需要迅速检查SEO表中是否存在这些规则并生成元标签。

因此,我们采取了以下措施

  1. 解析GET参数为数组元素
  2. 使用方法combinations处理参数,将每个元素替换为*
  3. 获取所有可能的查询掩码集,这些掩码可以生成SEO标签。直接解决此问题是不可能的,因为可能已经编写了包含10个筛选器的规则,其中5个是*(任意)。
  4. 将得到的数组通过一个查询处理
  5. 好处

结果

  1. 无筛选器的餐厅页面: https://msk.wed-expert.com/categories/restaurants-and-cafes
  2. 有最低平均账单金额筛选器的餐厅页面: https://msk.wed-expert.com/categories/restaurants-and-cafes?average_check=0
  3. 有最低平均账单金额和(任意)事件筛选器的餐厅页面: 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
	]
];
*/