PHP阵列交叉口优化代码分析

PHP阵列交叉口优化代码分析
但由于手机的很多参数,以及手机参数的不同,所以参数表的结构通常是垂直表(一个参数是一行),而不是交叉表(一个参数是一个列表),此时使用一些参数得到结果,通常是分离每个参数得到结果。然后乘十字路口。
假设每个参数将包含一千个左右的唯一结果(id int),这是模拟某些数据生成的前提:
复制代码代码如下所示:
< PHP
$ =函数(){
结果=数组();
($ i = 0;$ i < 1000;空){
价值= mt_rand(1, 10000);
如果(!isset($结果{价值})){
$结果;
美元+;
}
}
Return array_keys ($result);
};
param_a rand()=美元美元;
param_b rand()=美元美元;
>

注意:如果测试数据集很小,得出的结论可能是不一致的,先看看通过PHP内置的方法array_intersect所达到的性能
复制代码代码如下所示:
< PHP
$时间=瞬时(真);
结果= array_intersect美元(美元param_a,param_b美元);
$时间=瞬时(真)至时间;
回声array_intersect:{ $时间} ;
>

查看自定义方法实现的交叉的性能:
复制代码代码如下所示:
< PHP
函数交叉(){
如果(func_num_args()<2){
trigger_error('param错误,e_user_error);
}
一美元= func_get_args();
foreach($ args达arg){
如果(!is_array(元精)){
trigger_error('param错误,e_user_error);
}
}
$ =函数($ A,$ B){
结果=数组();
length_a美元=数(美元);
length_b美元=计数($);
为($我= 0,J = 0;美元美元美元我<< length_a J < length_b美元;null){
如果($ { i $ })
美元+;
否则,如果($ $ i $ })
美元+;
{ { { }
$结果;
美元+;
美元+;
}
}
返回$结果;
};
结果= array_shift美元(合一);
排序(结果);
Foreach ($args as $arg) {
排序(精);
$结果= $相交($结果,精);
}
返回$结果;
}
$时间=瞬时(真);
结果=相交(param_a美元美元,美元param_b);
$时间=瞬时(真)至时间;

>

直观地说,我们肯定会认为内置函数比自定义函数快,但在这种情况下,结果是相反的:
array_intersect:0.023918151855469
相交:0.0026049613952637
需要提醒的是,array_intersect相交是不完全相同的功能,并举例如下:
复制代码代码如下所示:
param_a美元=阵(1, 2, 2);
param_b美元=阵(1, 2, 3);
var_dump(
array_intersect(param_a美元,美元param_b),
相交(param_a美元,美元param_b)
);

array_intersect:1, 2, 2
相交:1, 2
也就是说,如果在第一个数组参数的重复元素,array_intersect将返回所有重复的元素,满足需求,而不是仅仅返回一个。感兴趣的读者可以更改参数的顺序,并再次查看结果。
当我第一次写交集方法时,我可能会写以下内容:
复制代码代码如下所示:
< PHP
函数交叉(){
如果(func_num_args()<2){
trigger_error('param错误,e_user_error);
}
一美元= func_get_args();
foreach($ args达arg){
如果(!is_array(元精)){
trigger_error('param错误,e_user_error);
}
}
结果=数组();
$data = array_count_values(
call_user_func_array('array_merge,$ args)
);
foreach(美元美元美元价值=数据计数){
如果($ > 1){
$结果;
}
}
返回$结果;
}
>

代码更简洁,但也有缺点。因为array_merge使用,所以当有很多数组中的元素,记忆会更大。否则,如果不存在数组中的许多元素,这种方法也是可行的。(来源:火丁笔记
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部