月度归档:2013年04月

php中使用array_reduce给数组降维

PHP里面最强大的工具,就是数组,它融合了多种数据结构的特点,数组、队列、栈、哈希表等等,而且容器可以兼容各种类型,任意嵌套,简直无所不能。围绕着数组,PHP原生支持了一些列的函数,使得数组在实际编程实践中,可以有更强的表达能力和更高的编程效率。但是这要求我们用PHP的方式去思考,尽量使用PHP原生的函数解决问题,而不是掌握了一个foreach就一招鲜吃遍天。

本文谈论的就是一个数组函数,array_reduce,我在文章的标题中,使用了“降维”这个词语,因为我联想到了《三体》里面的维度攻击,能把三维变二维,实现毁灭性打击,array_reduce当然不是攻击用的,但是array_reduce可以帮助我们实现降维,将一维数组“降维”成单一字符串。当然,array_reduce的可以但不仅限于实现这个功能,这取决于运用过程中,程序员对问题的抽象能力。

这里讲一种应用场景:从数据库中按照某种条件,取出一组记录,然后按照某种规则,将某个特定字段,拼接成一个单一字符串。举个简单的例子,比如我们常见的联表查询,如果两张表,位于不同的DB,不同的物理机,甚至是通过开放API拉取回来的数据,那么我们可能没法使用简单的联表查询,只能分步骤查询,先查询一个结果集,将结果集主键拼接成IN语句,再到另一个DB去查询结果集。

这是非常常见的一种写法,思路非常自然、直接,也未见什么冗余,但是我觉得,这不是PHP思考问题的方式。PHP的思考方式,是像这样:

我可能没法证明,第二种写法,比第一种写法要高多少效率,减少多少运行时间,但是我更提倡第二种写法,因为第二种写法,是按照PHP的方式在思考问题,提供了更好的语义,更强的表达,retrieve_ids函数还可以复用在类似的场景里。很多情况下,函数里大段的foreach遍历,都并非为了表达业务本身,而只是为了取得某种中间结果,而PHP提供了工具,帮助我们避免这种局面,而让自己的代码更加简洁易读。这并非炫耀什么奇技淫巧,这只是PHP自己的正常的方式而已。

原文链接:http://blogread.cn/it/article/6058

VirtualBox上安装了Windows XP不能全屏

VirtualBox上安装了Windows XP发现不能全屏(就算点全屏,周围也是空白。。。)。
想起了以前用vmware的时候可以版自动识别当前屏幕分辨率(字体不会拉伸,变形)。
它需要安装一个叫 VMtools的工具,这个选项在菜单的相关工具栏可以找的到。

VirtualBox肯定也有类似的工具包。只是名称不同而已(这是稍稍百度以后得出的结果)
安装方法等你的“虚拟XP”启动以后 点虚拟机控制台工具栏的 设备->安装增强功能->
接着可以会询问此程序不是Windows所认识的东西这类的,一路确定
完成以后重启虚拟机,现在可以把虚拟机随意切换到  无缝模式,全屏模式,自动缩放模式

笔者特别推荐无缝模式,现在的这个Windows XP就像一个在Ubuntu的一个小应用程序(屏幕充分利用,因为笔者的主操作系统为Ubuntu,用这个XP是做一些辅助的事情。像Ubuntu做起来比较费劲的事,登录网银什么 ps:有些网银只能用IE登录)页面一样,和自己所打开的别的窗口是一样的
用着特别舒服。好啦现在可以随便装一些东西,在ubuntu装不上的就可以装在XP上面了。
 

Google浏览器的底部会出现广告

Google浏览器的底部会出现广告

在插件里面找了一下,原来是SmoothGestures这个手势插件在搞鬼。打开该插件选项Enable Ads这一项,作者故意把这一条弄成EN文的。
Enable Ads
SmoothGestures is ad supported, the application includes advertising on select domains and is transparent to you the user. Disabling the setting removes no functionality, but it does make it financially difficult to maintain the code… geek’s gotta eat. 🙂
翻译一下这段话:
启用广告
SmoothGestures,广告支持,应用程序包括在特定域的广告,你的用户是透明的。禁用设置删除功能,但它确实使经济困难的维护代码…怪胎的总得吃。 🙂
呵呵,大概都明白了吧。
大家都讨厌这个广告。但是从作者的角度去想想还是可以理解的。毕竟都是搞软件的。
接下来大家把它禁止就可以了。

三个方法让你成为更好的程序员

1. 做出个东西

找个东西/项目,直接开始做。

想进入编程这一行业的人开始时总是试图先学会一门语言。这种方法是 低效的。找一个项目或一个小功能软件去做,针对性的学习那些需要完成这个任务必须具备的知识技能。这种学法让你有了一个学习的环境和目标,逼迫你去具有创 造力。有些最有价值的知识会来自解决那些之前没有人解决过的独特问题。这个过程是辛苦的,但要的就是你的坚持。

2. 传教

传教,这能激发你去深入研究某项知识技能,会让你发现自己在某些知识上其实很烂。

因为我想学习AngularJS,于是我就是做了一个Twitter游戏教程。传教能够让你帮助他人,同时满足你求知欲,并提升你的价值。

3. 结伴

结伴编程是最快的学习别人分享的知识的方法。你吸取他们的知识,工作方式,以及问题解决策略,无需费力用自己的亲身体验去获取它们。

通过和其他程序员一起编程,我的技能有了快速的提高,但你不能就此而止。通过做一些个人项目,你能扩展那些分享到的知识,并能给你的团队带来新鲜的思想。

[英文原文: 3 Ways to Become a Better Developer]

php异常处理模块

PHP 5 添加了类似于其它语言的异常处理模块。在 PHP 代码中所产生的异常可被 throw 语句
抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能
存在的异常。每一个 try 至少要有一个与之对应的 catch。使用多个 catch 可以捕获不同的类
所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,
PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常。

当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,
而 PHP 就会尝试查找第一个能与之匹配的 catch。如果一个异常没有被捕获,而且又没用使用
set_exception_handler() 作相应的处理的话,那么 PHP 将会产生一个严重的错误,
并且输出 Uncaught Exception … (未捕获异常)的提示信息。

lamp博客主题改版啦!

在网上搜wordpress有好多主题大家都在开发自己的主题,博主也终于忍不住要开发自己的主题

所意这次清明节在家休息,顺便改了一下主题

主要有头部的导航菜单改成了黑色的
最上面加了通栏,可以加一些常用功能
脚部的样式换成了黑色的并且用红色点醉
整体风格以黑主,红色点醉。自己看着很满意。
并且还会不断完善,最后发布出去和大家分享
如果有对本主题有意思的请继续关注。
不久就会出一个属于LAMP技术博客自己风格beta版的主题了。
加油www.zzs.me
未万待续