PHP文件读写以及本地跑数据一些坑
来源:互联网 发布:日本人残忍知乎 编辑:程序博客网 时间:2024/06/05 22:53
文件读写
这段时间在做PHP相关的开发,经常会做PHP下的文件读写,主要用于跑数据需求。
大家平常在工作的过程中,经常会涉及到一些数据需求,这些数据常常无法通过一条sql语句完成,或者sql的查询效率会很低;相反地,我们可以将数据以高效率的方式跑到本地。例如,通过linux下的管道命令。之后,我们使用任意语言在本地做一个数据解析,可以更快地完成任务。
文件读写过程中,经常会踩的一些坑
1. 读数据时,不删除换行”\n”,这个问题看起来简单,确经常会让我们犯错,例如,现在有500W量级文章,我想了解其中包含109种tag的文章浏览量,那么对于这个问题,我们应该如何做,来看看PHP代码是如何实现的。
<?phpini_set('memory_limit', '2048M');$keyFile = fopen('./key.txt', 'r');$arrKeyWords = array();$strKey = '';while($strKey = trim(fgets($keyFile))){///这里我们使用了trim函数,来避免将\n读进键值数组的Key中,这会导致在下面使用Hash时,对应key匹配无法成功 $arrKeyWords[$strKey] = 0;}//var_dump($arrKeyWords);die();$objTaskFile = fopen('./allData', 'r');$strRow = '';while($strRow = fgets($objTaskFile)){ $arrInfo = explode("\t", $strRow); //获取pv $intPV = intval($arrInfo[2]); //获取tag字符串,并用urldecode解码 $strTags = $arrInfo[1]; $strDecodedTags = urldecode($strTags); //将tag解析为数组 $arrTags = explode(",", $strDecodedTags); if(empty($arrTags)){ continue; } foreach($arrTags as $tag){ if(!isset($arrKeyWords[$tag])){ continue; } $arrKeyWords[$tag] += $intPV; } unset($intPV); unset($strTags); unset($arrInfo);}$strFile = fopen('./result', 'w');foreach($arrKeyWords as $key => $word){ fputs($strFile , $key . "\t" . $word . "\n");}
2. 不同的跑数据方法各有快慢,那么对于在数组中做查找时,最快的方法无疑是Hash了,对于PHP即键值数组,注意上面代码中的isset()方法。对应于Java,那就是大名鼎鼎的HashMap这个集合类了,相比较传统的查找方法,速度上可以提升非常多,之前做过测试数据,有兴趣地同学可以尝试一下。
3. 巧用分割函数,对应PHP代码中的explode和implode,可以高效的解决分隔符统一的文本问题。
上面那段文本解析地是诸如此类的数据,key.txt中存储的是要查找的关键词
2583404 %E5%81%A5%E8%BA%AB%2C%E5%BF%A0%E5%91%8A 272289115 %E6%88%B7%E5%8F%A3%2C%E8%BF%81%E5%85%A5 572551112 spss 752547769 %E5%B1%85%E4%B8%AD%2C%E5%8F%B3%E5%AF%B9%E9%BD%90 1005
0 0
- PHP文件读写以及本地跑数据一些坑
- 文件读写的一些坑
- Python本地读写数据
- python 读写本地数据
- Android本地数据存储之.txt文件存储读写
- PHP读写JSON文件以及jQuery的getJSON函数用法
- Android下的数据保存、文件读写以及访问模式
- js读写本地xml文件
- JS 读写文件到本地
- PHP读写大文件
- PHP如何读写文件
- PHP如何读写文件
- PHP 文件读写操作
- PHP如何读写文件
- PHP读写文件操作
- php简单读写文件
- PHP读写文件示例
- PHP如何读写文件
- 嵌入式就业前景分析-----韦山东嵌入式开发群文件
- 基本的类函数和对象函数
- Struts2 控制标签:<s:if>、<s:elseif>和<s:else>
- TextInputEditText 中文翻译
- MVP架构实践
- PHP文件读写以及本地跑数据一些坑
- 中少图书管理员权限编写
- AJAX文件上传
- Struts2的工作原理(图解)详解
- Android:时间工具类 -- 时间戳转换成日期,日期转换成时间戳
- ActionContextCleanUp的作用
- 通俗易懂求半平面交(转载)
- Cassandra 配置优化(Cassandra.yaml)
- Mongodb在Ubuntu环境下的安装(以mongodb3.2为例)