PHP中使用glob递归是一个很方便的事情,如下:
PHP代码
- function read ( $dirname )
- {
- static $dInfo;
- $dirname .= subStr( $dirname, -1 ) == "/" ? "" : "/";
- $dirInfo = glob( $dirname . "*" );
- foreach ( $dirInfo as $info ){
- $dInfo[] = $info;
- if ( is_dir( $info ) ){
- if ( !is_readable( $info ) ){
- chmod( $info, 0777 );
- }
- read( $info );
- }
- }
- return $dInfo;
- }
当然用dir函数也可以:
PHP代码
- function read ( $dirname )
- {
- static $dInfo;
- $d = dir( $dirname );
- if ( $d ){
- while ( false !== ($entry = $d->read() ) ){
- if( $entry != '.' && $entry != '..' ){
- $entry = $dirname . '/' . $entry ;
- $dInfo[] = $entry ;
- if( is_dir( $entry )){
- if ( !is_readable( $entry ) ){
- chmod( $entry, 0777 );
- }
-
- read( $entry );
- }
- }
- }
- }
- return $dInfo;
- }
嗯。看上去没有什么问题。但是有一个情况需要注意
在linux下面,目录名可以为".aa",最典型的例子就是svn目录,svn目录里大量的".svn"的目录,好象,在linux下面,这样以"."开头的目录,默认是隐藏目录,不显示的。
所以,在使用glob的时候,这样的目录是认不出来的。这点要千万注意
做个笔记。
怎么说呢,这个东西不太适合存储ID进数据库的用户,因为我在打开该文件后发现,里面的key全是t,s之类的,作者shawphy也建议换成j,s,q之类的key,但对于普通 用户来说太累了。
当然,这个数据应该是配合json2select插件而来的,所以我们不能奢求什么。
如果确实需要,到这里下载数据,然后自己通过程序生成json文件,修改一下json2select插件。当然更能做的就是问一下google,百度,谁有三级联动的代码。
原文如下:
去年写过一个小插件,json2select 一直想要转换出配套的数据,但总有这样那样的问题之后,终于拖到了现在。
好在一切悲剧的日子已经过去了,新时代已经来临。猛击这里
三级联动,直辖市精确到城镇街道,一般城市到达区。强烈推荐。
这一切都要感谢 Asfman ,辛勤的工作,当然也少不了感谢搜狐白社会,是他们提供了这么好的数据,也要感谢我们伟大祖国,我们中华民族地大物博,省市也很多……
这套数据有100K多一点,但可以想办法压缩
把其中重复字符串替换掉,把街道替换成j,市替换成s,区替换成q,都可以减少文件体积。要用的时候先用正则替换后,再eval执行字符串就能得到数据了,可以达到68K左右
另外,保存成gb2312的话也可以减小体积。目前我手头的是52K左右大小了。但可能导致乱码,慎用。
进一步,如果通过词频分析,找出重复最多的前20个,替换的话,相信可以把体积维持在30K以下了。但手头没工具,最近也很忙,所以大家自己发挥吧。
我粗略压缩后的东西我就不单独发布了。
司徒正美的一些关于javascript的处理的兼容写法。如果不想用这些,可以直接用jQuery中的功能。如bind,unbind,$('XX'),$(document).ready()等
绑定事件
JavaScript代码
- var addEvent = function( obj, type, fn ) {
- if (obj.addEventListener)
- obj.addEventListener( type, fn, false );
- else if (obj.attachEvent) {
- obj["e"+type+fn] = fn;
- obj.attachEvent( "on"+type, function() {
- obj["e"+type+fn]();
- } );
- }
- };
另一个实现
JavaScript代码
- var addEvent = (function () {
- if (document.addEventListener) {
- return function (el, type, fn) {
- el.addEventListener(type, fn, false);
- };
- } else {
- return function (el, type, fn) {
- el.attachEvent('on' + type, function () {
- return fn.call(el, window.event);
- });
- }
- }
- })();
移除事件
JavaScript代码
- var removeEvent = function(obj, type, fn) {
- if (obj.removeEventListener)
- obj.removeEventListener( type, fn, false );
- else if (obj.detachEvent) {
- obj.detachEvent( "on"+type, obj["e"+type+fn] );
- obj["e"+type+fn] = null;
- }
- }
加载事件与脚本
JavaScript代码
- var loadEvent = function(func) {
- var oldonload = window.onload;
- if (typeof window.onload != 'function') {
- window.onload = func;
- }else {
- window.onload = function() {
- oldonload();
- func();
- }
- }
- }
阻止事件
JavaScript代码
- var cancelEvent = function(event) {
- event = event||window.event
- if (event.preventDefault) {
- event.preventDefault( );
- event.stopPropagation( );
- } else {
- event.returnValue = false;
- event.cancelBubble = true;
- }
- }
取得事件源对象
相当于Prototype.js框架的Event.element(e)
JavaScript代码
- var getTarget = function(event){
- event = event || window.event;
- var obj = event.srcElement ? event.srcElement : event.target;
- return obj
- }
本期阿里妈妈的广告结束后,开始清理广告。
同时征租广告位:
1、logo旁
2、全站左侧
3、文章内页
4、友情链接(目前清理中)
说明:
想知道IP、PV之类的请看网站底部的统计代码(已开放浏览功能)。
本文来自nio's blog(nio?尼奥?黑客帝国?),原文如下:
What makes a good programmer?
Some casual surfing led me to this article from a couple of years ago, titled "How to recognize a good programmer". It was a nice read, but as many in the comments pointed out, the criteria the author set forth most likely describe himself and are not really useful as rules-of-thumb on how to recognize a good programmer.
It got me thinking though, on what are the attributes I consider useful in fellow programmers. So what makes a good programmer?
以下五项,按照优先级,你会怎样排序呢?
- Security(安全性)
- Maintainability(可维护性)
- Usability(可用性)
- Performance(性能)
- LOC (lines-of-code) count(代码量)
作者认为最重要的是 usability,因为你开发的东西最终价值取决于最终用户。我们开发的目的是为了解决问题,如果解决不了问题,则说明项目是失败的。