PHP正则匹配字符串中的中文

如果标签里面有中文、英文、数字等混排,则需要对汉字进行特殊处理,由于PCRE不支持U P L之类的perl字符串处理转义,使用16进制或者Unicode进行处理,范例如下:

$str = "之二宽阔的甘家口东#标签1#标签2 #标签3。#标签4,都发$1234 ¥xc,cvm , ¥12,dflksjf如何#标签5.x #tag6.cvxcv“";
preg_match_all('/#([a-zA-Z0-9x7f-xff]+)/', $str, $mat);
print_r($mat);

preg_match("/x{00a5}x{ffe5}/u", $str, $mat); print_r($mat);


阅读全文

参考自:http://hi.baidu.com/ucolo/blog/item/356263a894169eec1e17a20d.html

今天研究了一下php的array_multisort,理解了之后发现他很强大,而且也不复杂。(手册上关于这个函数的讲解看得很费力)

手册讲解:array_multisort() 函数对多个数组或多维数组进行排序。

参数中的数组被当成一个表的列并以行来进行排序 – 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。

一、先看最简单的情况。有两个数组:

$arr1 = array(1,9,5);
$arr2 = array(6,2,4);

array_multisort($arr1,$arr2);

print_r($arr1); // 得到的顺序是1,5,9 print_r($arr2); // 得到的顺序是6,4,2

我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。


阅读全文

用PHP实现 给定的经纬度坐标之间的范围/距离的计算-函数:

/**
*求两个已知经纬度之间的距离,单位为米
*@param lng1,lng2 经度
*@param lat1,lat2 纬度
*@return float 距离,单位米
**/
function getdistance($lng1,$lat1,$lng2,$lat2)//根据经纬度计算距离
{
	//将角度转为狐度 
	$radLat1=deg2rad($lat1);
	$radLat2=deg2rad($lat2);
	$radLng1=deg2rad($lng1);
	$radLng2=deg2rad($lng2);
	$a=$radLat1-$radLat2;//两纬度之差,纬度<90
	$b=$radLng1-$radLng2;//两经度之差纬度<180
	$s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000;
	return $s;
}

//测试,返回结果 : 759.467618902 echo getdistance(116.4558029, 39.9167328, 116.460197, 39.910801);


阅读全文

最近在使用ammap和amcharts做一些数据可视化展现的工作,amcharts图表功能真的很强大,可自定义的属性很多。这是其官网文档链接。可以简单看看文档,会发现有很多属性,可以对图表中的每块表示数据的区域绑定事件,可以是一个url,也可以是一个js,怎么样,只有这两项,就绝对能满足很多扩展的需要了吧。

这是一个我做的例子,使用了ammap和amcharts,左边中国地图,不同省份的数据不一样,颜色代表不同等级的数据;右边是amcharts做的柱状图和折线图。

ammap和amcharts的案例--好用可扩展的javascript图表插件

ammap和amcharts的案例--好用可扩展的javascript图表插件

问题就在使用图表的过程中了,主要是右下角的那个折线图,在chrome、firefox、opera和IE9下均看过了,没有问题,可是到别人机器上,用的IE8,发现右下角的折线图出问题了。于是开始了JS的调试之旅,使用IE9的开发人员工具,可以很方便的调到IE7和IE8模式,之前一直都是firefox的firebug,现在一直都在用chrome,今天用了用IE9的调试工具,发现也挺好用的,主要是它有一个选项,可以设置为-始终从服务器中刷新,这样,每次IE运行获得的JS和CSS文件等,都不会是缓存中来的,调试起来很方便,不用总去清缓存。见下图:


阅读全文

MySQL怎样优化WHERE子句

此次讨论的为处理WHERE子句而进行的优化。例子中使用了 SELECT 语句,同样也适用于DELETE和UPDATE语句中的WHERE子句。

下面列出了MySQL执行的部分优化:

去除不必要的括号:

((a AND b) AND c OR (((a AND b) AND (c AND d))))

-> (a AND b AND c) OR (a AND b AND c AND d)

常量重叠:

(a<b AND b=c) AND a=5

-> b>5 AND b=c AND a=5

去除常量条件(由于常量重叠需要):

(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)

-> B=5 OR B=6

索引使用的常数表达式仅计算一次。


阅读全文

这主要是一个数据统计的web页面,展现统计结果。由于当时需求很紧,要求尽快能出来查询结果就行,而且是说以后会重新对这部分功能进行规划再开发。所以也没有考虑任何性能相关,劈哩啪啦的一天把很多数据统计的功能实现了。

现在,数据量已然有点规模了,但是还没有再开发的计划,目前还使用这个统计程序,但是由于有些数据量了,并且没有考虑过优化,所以目前查询速度很慢。尤其是其中有一个查询,居然耗时1分多,问题很大啊,今天抽点时间,找找问题,优化一下,主要做的工作的是改进sql语句,添加合适的索引。

存储的数据是根据用户的ID末尾的值来简单分表的,所以共有0到9一共10个表,需要遍历这10个表,然后把最后的数据相加,再处理后得到最后结果。由于需求还算比较简单,所以没有采用定时脚本去处理前几日的数据后入库保存的做法,如果采用以上做法,速度会快更多。


阅读全文

ThinkPHP的文件上传类UploadFile.class.php位于ThinkPHPLibORGNet文件内下,其对于文件上传的处理非常的强大和方便。内置的文件上传类UploadFile类提供了下面的功能:

1、上传检测

2、多文件上传

3、自动生成上传图片缩略图

4、支持覆盖方式上传

5、支持上传类型、附件大小、上传路径定义

6、采用IFrame方式的Ajax上传机制支持

7、支持上传文件命名规则

8、支持对上传文件的Hash规则

9、可设置是否保存附件数据到数据库

在上传表单中可以进行很多参数的设置对上传进行灵活的定义,Action类的_upload方法会自动进行相关处理。

要更好的理解上传保存操作,可以参考ThinkPHP的附件数据表结构,更加详细下面的UploadFile类的参数和使用方法可以参考文件上传类的使用。


阅读全文

作者的图片

DigDeeply

Technology Stack: PHP/Openresty/GoLang, and so on…

Web Development Engineer

Beijing China