php 循环大数组 卡死,PHP 大数组循环问题_PHP教程
小妹刚刚改投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教程相关推荐
- php数组保存txt,php将数组存储为文本文件方法汇总,_PHP教程
php将数组存储为文本文件方法汇总, php 缓存数组形式的变量,实际上就是将 php 将数组写入到一个文本文件或者后缀名为 .php 存储起来,使用的时候直接调用这个文件.那么如何使用 php 将数 ...
- php数组指定键名,查找数组中指定键名的值_PHP教程
HTML Ajax传值 输入要查找的值: 查找的结果为: //示例数组 搜索 depth $src_array = array( 'test' => '123', array( 'has' =& ...
- JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。
接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...
- Python 面试题:输入一个数组,输出该数组的第二大的数字
问题: 输入一个数组,输出该数组的第二大的数字,并且编写相关的测试用例 注意: 1.如果list含有非int, float元素需要remove 2.如果list有重复的最大元素,需要自己处理,内置的l ...
- C++实现求数组中前K大的数
参考:http://blog.csdn.net/xiaoding133/article/details/8037086 C++实现求数组中前K大的数,即求数组的最大的k个数 //数组中求最大的k个数 ...
- 如何找出数组中第二大的数
1.最容易想到的办法 我们可以用最简单的办法来找到一个数组中任意大小的数字,那就是按照某一个排序方式将数组的所有元素进行排序,然后按需取出来就可以,知识这种方式的时间复杂度和空间复杂度比较大,所以,有 ...
- 算法---找到数组中第二大的数
题目 找到无序数组中第二大的数 思路 我们可以用两个容器记录所有遍历过的元素中,第一大和第二大的数,在后续的遍历过程中,我们不断更新这两个值即可.时间复杂度O(n) 实现方法: public stat ...
- 每天一道LeetCode-----给定大小为n+1的数组,元素大小在[1 : n]之间,只有一个元素会重复出现多次,找到重复的那个
Find the Duplicate Number 原题链接Find the Duplicate Number 给定一定大小为n+1的数组,数组中的元素只可能是1到n中的数字,包括1和n.在数组中,有 ...
- 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
1. 问题描述 给定排的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X.给出一个O(nlg(n))的算法. 2. 解决思路 首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nl ...
最新文章
- java λ表达式_Java λ表达式
- STL---string
- python 列表去重(数组)的几种方法_python 列表去重(数组)的几种方法
- 万达电影携手神策数据 数据赋能打造全球领先电影生活生态圈
- 【NOIP2013模拟9.29】TheSwaps
- Windows下SVN服务器的搭建步骤
- Android入门之AlertDialog
- fcntl函数参数F_GETPIPE_SZ、F_SETPIPE_SZ报错引出的关于linux-specific头文件的使用方法...
- vue遇到的问题合集
- boot lvm 分区_LVM磁盘逻辑卷管理
- 爬虫实践---电影排行榜和图片批量下载
- ES6学习笔记04:Set与Map
- Android_View,ViewGroup,Window之间的关系
- 2021【第十二届蓝桥杯省赛】 C/C++ B组(第一场)
- “一沙一世界”的感悟
- 卸载WPS后如何修复Office文档图标显示异常
- 新闻 - 被遗忘的“活化石”:BBS没落中求生
- E-Competitive Seagulls
- 极米Z7X对比当贝D5X区别 哪个值得买
- 本机微信开发环境搭建
热门文章
- 《Java编程思想》第四版读书笔记 第四章
- 【Android开发】之Fragment与Acitvity通信
- 单域MPLS ***数据转发实验分析
- MySQL运维常用系统命令
- I must be strong and carry on
- c语言程序设计课程设计学生信息管理系统,C语言程序设计课程设计报告----学生信息管理系统.doc...
- python实现路由功能_python 实现重启路由器
- python常用单词自由且开放_python常用英语单词词汇 unit7
- 白话说编程之java线程
- antd 获取table选中行数据_element-ui 组件el-table默认选中行setCurrentRow采坑记