小妹刚刚改投PHP门下。领导叫我把这段代码的执行效率优化一下

我现在知道的优化就是小循环外面,好像在这没啥用。

请问各位大侠我该怎么优化ne ? 领导说放内存里什么的。

基本就是2个大数组不停的循环算权重。

_aItems = $aItems;

$this->_aMatchs = array();

$this->_aShow = array();

}

public function newTable($aTable){

if (!is_array($aTable))

$aTable = (array)$aTable;

$this->_aTable = $aTable;

$this->generateDict();

}

private function generateDict() {

//将字典处理成数组形式

$convert = function($value) {

$value = str_replace('|', ',', $value);

$value = explode(',', $value);

return $value;

};

$this->_aDict = array_map($convert, $this->_aTable);

}

public function getMatchs() {

//返回对照表

return $this->_aMatchs;

}

public function getShow($sRule = 'debug') {

/*返回格式化的结果集

* $sFormat: 指定输出格式

*/

if (empty($this->_aItems)||empty($this->_aTable))

//字典源文件不存在

return false;

if (empty($this->_aShow)) {

/*匹配表还没有生成,自动调用相应的命令生成*/

$this->loopTable();

}

$makeDumpStr = function($value, $key) use (&$dumpStr) {

//生成导出文件的文本

if (count($value) >1) {

foreach ($value as $valueOne) {

$valueStr .= $valueOne. ',';

}

$dumpStr .= $this->_aItems[$key] . "t匹配多个记录号t". $valueStr ."rn";

} else {

$dumpStr .= $this->_aItems[$key] . "t匹配惟一记录号t". $value[0] ."rn";

}

};

switch($sRule) {

case 'debug':

print_r($this->_aShow);

break;

case 'json':

return json_encode($this->_aShow);

break;

case 'txt':

$timeExport = date("Y/M/D h:i:s");

$dumpStr = '';

$rFile = fopen('dump.txt', 'w');

array_walk($this->_aShow, $makeDumpStr);

$sContent = <<_ashow>

break;

}

}

private function loopTable() {

//遍历

foreach ($this->_aItems as $iItemKey=> $sItemLine) {

$this->matchElement($iItemKey);

//print_r($this->_aMatchs);

$this->match2Show($iItemKey);

//print_r($this->_aShow);

//echo "-----------------";

}

//print_r($this->_aMatchs);

//print_r($this->_aShow);

}

private function matchElement($iKey) {

$iMax = 0;

foreach ($this->_aDict as $iDictKey => $aDictLine) {

foreach($aDictLine as $sDictElement) {

$str = $this->_aItems[$iKey];

if(strstr($str, $sDictElement)){

//匹配到一个元素,计数器+1

++$this->_aMatchs[$iKey]['keyring'][$iDictKey];

}

}

if (!$this->_aMatchs[$iKey]['keyring'][$iDictKey]) {

//没有匹配到内容

$this->_aMatchs[$iKey]['keyring'][$iDictKey] = 0;

}

if ($iMax_aMatchs[$iKey]['keyring'][$iDictKey])

$iMax = $this->_aMatchs[$iKey]['keyring'][$iDictKey];

$this->_aMatchs[$iKey]['index'] = array(

'key' => $iDictKey,

'count' => $iMax

);

}

}

private function match2Show($iKey) {

//将对照表转化为结果集

$multiMatch = array();

//echo "ikey =". $iKey.", ";

foreach ($this->_aMatchs[$iKey]['keyring'] as $iMatchKey => $iVal) {

if ($iVal_aMatchs[$iKey]['index']['count']) {

//这个值比最大值小

//echo "x";

continue;

} else {

//这个值跟最大值相等,将结果累加到记录中

//echo "y";

$multiMatch[] = $iMatchKey;

}

}

if (count($multiMatch)> 1)

//多于一条记录匹配值相同

$this->_aShow[$iKey] = $multiMatch;

else

//匹配值最大值唯一

$this->_aShow[$iKey] = array($this->_aMatchs[$iKey]['index']['key']);

}

}

$aItems = array(

'chinaisbig',

'whichisnot',

.....

上万条

.....

'totalyrightforme',

);

$aTable = array(

'china,is|small',

'china,big|me',

.....

上千条

.....

'china,is|big,wich|not,me',

);

$weight = new weight();

$weight->newItems($aItems);

$weight->newTable($aTable);

$weight->getShow('debug');

?>

www.bkjia.comtrueTechArticle小妹刚刚改投PHP门下。领导叫我把这段代码的执行效率优化一下 我现在知道的优化就是小循环外面,好像在这没啥用。 请问各位大侠我该…

php 循环大数组 卡死,PHP 大数组循环问题_PHP教程相关推荐

  1. php数组保存txt,php将数组存储为文本文件方法汇总,_PHP教程

    php将数组存储为文本文件方法汇总, php 缓存数组形式的变量,实际上就是将 php 将数组写入到一个文本文件或者后缀名为 .php 存储起来,使用的时候直接调用这个文件.那么如何使用 php 将数 ...

  2. php数组指定键名,查找数组中指定键名的值_PHP教程

    HTML Ajax传值 输入要查找的值: 查找的结果为: //示例数组 搜索 depth $src_array = array( 'test' => '123', array( 'has' =& ...

  3. JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。

    接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...

  4. Python 面试题:输入一个数组,输出该数组的第二大的数字

    问题: 输入一个数组,输出该数组的第二大的数字,并且编写相关的测试用例 注意: 1.如果list含有非int, float元素需要remove 2.如果list有重复的最大元素,需要自己处理,内置的l ...

  5. C++实现求数组中前K大的数

    参考:http://blog.csdn.net/xiaoding133/article/details/8037086 C++实现求数组中前K大的数,即求数组的最大的k个数 //数组中求最大的k个数 ...

  6. 如何找出数组中第二大的数

    1.最容易想到的办法 我们可以用最简单的办法来找到一个数组中任意大小的数字,那就是按照某一个排序方式将数组的所有元素进行排序,然后按需取出来就可以,知识这种方式的时间复杂度和空间复杂度比较大,所以,有 ...

  7. 算法---找到数组中第二大的数

    题目 找到无序数组中第二大的数 思路 我们可以用两个容器记录所有遍历过的元素中,第一大和第二大的数,在后续的遍历过程中,我们不断更新这两个值即可.时间复杂度O(n) 实现方法: public stat ...

  8. 每天一道LeetCode-----给定大小为n+1的数组,元素大小在[1 : n]之间,只有一个元素会重复出现多次,找到重复的那个

    Find the Duplicate Number 原题链接Find the Duplicate Number 给定一定大小为n+1的数组,数组中的元素只可能是1到n中的数字,包括1和n.在数组中,有 ...

  9. 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X

    1. 问题描述 给定排的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X.给出一个O(nlg(n))的算法. 2. 解决思路 首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nl ...

最新文章

  1. java λ表达式_Java λ表达式
  2. STL---string
  3. python 列表去重(数组)的几种方法_python 列表去重(数组)的几种方法
  4. 万达电影携手神策数据 数据赋能打造全球领先电影生活生态圈
  5. 【NOIP2013模拟9.29】TheSwaps
  6. Windows下SVN服务器的搭建步骤
  7. Android入门之AlertDialog
  8. fcntl函数参数F_GETPIPE_SZ、F_SETPIPE_SZ报错引出的关于linux-specific头文件的使用方法...
  9. vue遇到的问题合集
  10. boot lvm 分区_LVM磁盘逻辑卷管理
  11. 爬虫实践---电影排行榜和图片批量下载
  12. ES6学习笔记04:Set与Map
  13. Android_View,ViewGroup,Window之间的关系
  14. 2021【第十二届蓝桥杯省赛】 C/C++ B组(第一场)
  15. “一沙一世界”的感悟
  16. 卸载WPS后如何修复Office文档图标显示异常
  17. 新闻 - 被遗忘的“活化石”:BBS没落中求生
  18. E-Competitive Seagulls
  19. 极米Z7X对比当贝D5X区别 哪个值得买
  20. 本机微信开发环境搭建

热门文章

  1. 《Java编程思想》第四版读书笔记 第四章
  2. 【Android开发】之Fragment与Acitvity通信
  3. 单域MPLS ***数据转发实验分析
  4. MySQL运维常用系统命令
  5. I must be strong and carry on
  6. c语言程序设计课程设计学生信息管理系统,C语言程序设计课程设计报告----学生信息管理系统.doc...
  7. python实现路由功能_python 实现重启路由器
  8. python常用单词自由且开放_python常用英语单词词汇 unit7
  9. 白话说编程之java线程
  10. antd 获取table选中行数据_element-ui 组件el-table默认选中行setCurrentRow采坑记