首页 > 作文

PHP数组交集的优化代码分析

更新时间:2023-04-06 11:42:46 阅读: 评论:0

不过由于手机的参数多,且不同的手机其参数差异大,所以参数表结构通常是纵表(一个参数是一行),而不是横表(一个参数是一列),此时使用若干参数来取结果,通常就是把每个单独参数来取结果,再一起取交集。

假定每个参数会包含一千个左右的唯一结果(id int),以此为前提来模拟生成一些数据:


复制代码 代码如下:

<?php

$rand = function() {

$result = array();

for ($i = 0; $i < 1000; null) {

$value = mt_rand(1, 10000);

if (!ist($result[$value])) {

$result[$value] = null;

$i++;

}

}

return array_keys($result);

};

$param_a = $rand();

$param_b = $rand();

?>

注意:如果测试数据集过小的话,结论可能会出现不一致,先来看看通过php内置方法array_interct实现的性能:


复制代码 代码如下:

<?php

$time = microtime(true);

$result = array_interct($param_a, $param_b);

$time = microtime(true) – $time;

echo “array_interct: {$time}\n”;

?>

再来看看通过自定义方法interct实现的性能:


复制代码 代码如下:

<?php

function interct() {

if (func_num_args() < 2) {

trigg跆拳道比赛规则er_error(‘param error’, e_ur_error);

}

$args = func_get_args();

foreach ($args as $arg) {

if (!is_array($arg)) {

trigger_error(‘param error’, e_ur_error);

}

}

$interct = function($a, $b) {

$result = array();

$length_a = count($a);

$length_b = count($b);

for ($i = 0, $j = 0; $i < $length_a && $j < $length_b; null) {

if($a[$i] < $b[$j]) {

$i++;

} el if($a[$i] > $b[$j]) {

$j++;

} el {

$result[] = $a[$i];

$i++;

$j++;

}

}

return $result;

};

$r小学阅读教学论文esult = array_shift($args);

sort($result);

foreach ($args as $arg) {

sort($arg);

$result = $interct($result, $arg);

}

return $result;

}

$time = microtime(true);

$result = interct($param_a, $param_b);

$time = microtime(true) – $time;

echo &蜡烛及其燃烧的探究#8220;interct: {$time}\n”;

?>

直觉上,我们肯定会认为内置函数快于自定义函数,但本例中结果恰恰相反:

array_interct: 0.023918151855469

interct: 0.0026049613952637

需要提醒大家的是,array_interct和interct在功能上并不性病 症状完全等价,例子如下:


复制代码 代码如下:

$param_a = array(1, 2, 2);

$param_b = array(1, 2, 3);

var_dump(

array_interct($param_a, $param_b),

interct($param_a, $param_b)

);

array_interct: 1, 2, 2

interct: 1, 2

也就是说,如果在第一个数组参数中有重复元素的话,则array_interct会返回所有满足条件的重复元素,而不是仅仅返回一个,有兴趣的读者可以变换一下参数顺序再看结果。

再唠叨一下,最初我写interct方法时,大概写成下面这个样子:


复制代码 代码如下:

<?php

function interct() {

if (func_num_args() < 2) {

trigger_error(‘param error’, e_ur_error);

}

$args = func_get_args();

foreach ($args as $arg) {

if (!is_array($arg)) {

trigger_error(‘param error’, e_ur_error);

}

}

$result = array();

$data = array_count_values(

call_ur_func_array(‘array_merge’, $args)

);

foreach ($data as $value => $count) 什么是整数{

if ($count > 1) {

$result[] = $value;

}

}

return $result;

}

?>

代码更简洁,不过有一个弊端,因为使用了array_merge,所以当数组中元素非常多的时候,占用的内存会比较大,反之如果数组中元素不是非常多,那么此方法也是可行的。(来源:火丁笔记)

本文发布于:2023-04-06 11:42:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/47565cc61244133493f15fe2e898544d.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP数组交集的优化代码分析.doc

本文 PDF 下载地址:PHP数组交集的优化代码分析.pdf

标签:代码   参数   元素   方法
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图