一道酷讯的笔试题…
要求:输入一个英文方式的数字,输出中文方式的数字表达方式。
比如:
输入:12345
输出:一万二千三百四十五
下面是我的算法,本来想用explode的后来发现当separator 为空字符串(”"),explode() 将返回 FALSE。所以使用了sscanf,比较复杂.想不出更简单的来了..
- <?php
- $a = 12345;
- $units = array('', '十', '百', '千', '万', '十', '百', '千', '亿');
- $num = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
- $b = array_reverse(sscanf($a, join('', array_fill(0, strlen($a)%10, '%1d'))));
- foreach ($b as $k => $v) {
- $b[$k] = $num[$v];
- $new[] = $units[$k];
- $new[] = $b[$k];
- }
- echo join('', array_reverse($new));
仿开心QQ邮箱的INPUT组件..
觉得很有意思..自己就模仿了一个..没有看他们的源码..只是按照自己的想法做的..
还不是十分完善..但是大体的样子出来了..:)
等以后慢慢完善吧..
演示地址:http://www.skiyo.cn/demo/input/
下载就没有了..右键看源码就可以了..:)
通过表单修改PHP配置文件..
我上次写过一个缓存类..几乎就实现了这个功能..
但是看到PPC还有人问到..所以我就简单的举例例子..
原理还是var_export..使用这个的好处就是可以自动识别类型..并且数组也不怕:)..
演示地址:http://www.skiyo.cn/demo/setconfig/
详细的代码我就不贴了..
直接给出下载地址吧..
介绍下不常用的函数 – sscanf
也许你经常会使用sprintf..比如.
- $str = "%s刚才吃了%s";
- echo sprintf($str, '博主', '大便');
- //output 博主刚才吃了大便
顾名思义..格式化输出..其实是跟printf延伸而来的..
但是还有个格式化输入..大家常用吗??
那就是sscanf..如果你还对他很少了解..那么我们今天来看几个例子.
如何读出一个日期的年份月份和日期??比如”2009年5月15日”
那么这时候我们使用sscanf来试下..
我们来用面向对象的方式写程序吧..
上次说了很多面向对象的思想..很多人也许思想是有了..但是无法落实到程序上..
为什么JSP不是面向对象的呢??因为我们知道..web编程这种特性注定了要面向过程的..
然而一些框架..还是完成了这个心愿..当今的一些框架都是利用网站统一入口来实现了所谓的面相对象的编程方式..无非就是判断哪个Action然后去执行这个Action中的方法而已..Punny也完成了这一点..
但是网站统一入口有他的好处..也会有他的弊病..
所以今天我们要完成的就是不利用网站统一入口来完成所谓的面相对象的编程..
其实实现也非常简单..无非也就是判断Action..指向方法而已..
我们需要做的就是做一个父类..所有的页面都需要继承自这个父类即可..
- <?php
- /**
- * Action.class.php by Jessica
- *
- */
- class Action {
- /**
- * 404 Action Not Found
- * You can rewrite it if you need!
- *
- */
- public function notFound() {
- echo '404 Action Not Found!!';
- }
- /**
- * Start Action
- *
- * @access public
- *
- */
- public final function run() {
- $do = $_GET['do'];
- $goto = emptyempty($do) ? 'doDefault' : 'do'.ucfirst(strtolower($do));
- /**
- * Must be "do" + Action;
- * The first letter MUST be upper case and others MUST be lower case!!!
- */
- if (method_exists($this, $goto)) {
- return $this->$goto();
- } else {
- return $this->notFound();
- }
- }
- }
我们需要做的.就是继承这个类好了..
PS:这次用了英文注释..顺便锻炼下英文..也许有些语法错误..Orz…
在ubuntu下重新编译PHP…
上次说了怎么DIY PHP函数,好多人苦于不会重新编译PHP,其实非常简单。我们今天来学习下。
首先既然是ubuntu,我们就应该利用它的优点来部署lamp,什么优点?就是傻瓜式部署lamp。
sudo apt-get apache2 php5-mysql libapache2-mod-php5 mysql-server
要提示mysql的root密码。安装好后可以直接运行下http://127.0.0.1 就会出现 It works!
安装完成后你可能会问,为什么要安装PHP?我们不是要手动编译安装吗??
对,没错。但是为了更加简便。我这里用到了一个偷梁换柱的方法,因为你安装完上面的包以后ubuntu就给你设置好了。
所以我们只需要把PHP重新编译下,然后覆盖就可以了。
在php.net上下载了最新的5.2.9的源码后,比如我们解压到桌面上。
这时候需要进入PHP的目录。然后config配置一下,我们这里只带上最基本的参数。
./configure –prefix=/usr/local/php –with-apxs2=/usr/bin/apxs2
配置好后。再make就编译成功了
make
DIY PHP函数之完善count()…
记得有一道面试题是这样的..
- $str = 'This is a string!';
- echo count($str);
很多人都以为输出的是17..但是现实不是这样的..输出的是1..
为什么会是这样呢??是不是PHP的BUG呢??
其实这是PHP故意这样设计的..(我估计是这样的..因为这个函数是在array.c中..也就是说是对于array的函数..)
知其然当然是不够的.我们需要知其所以然..所以我们非常有必要去看一看这个函数的源码..
为什么当是string类型的返回的就是1了..
以下就是count的函数原型..位于array.c中…
- PHP_FUNCTION(count)
- {
- zval *array;
- long mode = COUNT_NORMAL;
- if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE)
- return;
- switch (Z_TYPE_P(array)) {
- case IS_NULL:
- RETURN_LONG(0);
- break;
- case IS_ARRAY:
- RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC));
- break;
- case IS_OBJECT: {
- #ifdef HAVE_SPL
- /* 如果实现了SPL的接口。就去调用起count方法 */
- zval *retval;
- if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array), spl_ce_Countable TSRMLS_CC)) {
- zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval);
- if (retval) {
- convert_to_long_ex(&retval);
- RETVAL_LONG(Z_LVAL_P(retval));
- zval_ptr_dtor(&retval);
- }
- return;
- }
- #endif
- /* if not we return the number of properties (not taking visibility into account) */
- if (Z_OBJ_HT_P(array)->count_elements) {
- RETVAL_LONG(1);
- if (SUCCESS == Z_OBJ_HT(*array)->count_elements(array, &Z_LVAL_P(return_value) TSRMLS_CC)) {
- return;
- }
- }
- }
- //看到了吧,PHP只判断了array和object,其他的直接返回1了。
- default:
- RETURN_LONG(1);
- break;
- }
- }
请仔细看看上面的我写的注释..
原来在这个函数中..PHP只判断了array和object..因为PHP的原意是count本来是对于array来说的.strlen才是对于string来说的..
所以看到这里..我们是否可以DIY一下呢?让count支持string的函数呢??
分类目录
- ActionScript (2)
- CSS (25)
- Java (3)
- JavaScript (41)
- PHP (105)
- 心情杂谈 (34)
- 收集整理 (77)
- 本站原创 (55)
最近文章
- 将google ssl设置为IE8的默认搜索引擎..
- 我们来做一个会呼吸的菜单吧!!
- 在编译php-fpm0.6的时候需要注意的一些问题
- 使用PHP将大文件导入到数据库中..
- 关于用PHP调用WebService中参数为complexType的问题
- 神奇的两次按位非运算符
- 百路推免费短网址服务..首创”收藏夹获取短网址”..
- 哥学社正式上线..
- jQuery中getJSON跨域原理详解
- Web辅助工具条(原名:河蟹工具条CrabBar)0.1发布
- 腾讯微博PC端发图教程
- goo.gl URL Shortener for WordPress
- PHP上传进度条深度解析
- Google短网址(goo.gl)服务类
- TinyURL.class.php
最近评论
- 匿名 在 一个PHP+AJAX留言板的完整例子.非常简单! 上的评论
- pfeng 在 将google ssl设置为IE8的默认搜索引擎.. 上的评论
- pfeng 在 将google ssl设置为IE8的默认搜索引擎.. 上的评论
- 北戴河旅游住宿 在 PHPer的历练 上的评论
- konakona 在 将google ssl设置为IE8的默认搜索引擎.. 上的评论
- 宁静致远 在 PHPer的历练 上的评论
- Corsair_Boss 在 强人作品 – jQuery1.2.6源码分析 上的评论
- fanglor 在 PHPer的历练 上的评论
- fanglor 在 百路推免费短网址服务..首创”收藏夹获取短网址”.. 上的评论
- 匿名 在 Web辅助工具条(原名:河蟹工具条CrabBar)0.1发布 上的评论
文章索引模板
- 2010年七月 (3)
- 2010年六月 (4)
- 2010年五月 (2)
- 2010年四月 (9)
- 2010年三月 (12)
- 2010年二月 (1)
- 2010年一月 (3)
- 2009年十二月 (2)
- 2009年十一月 (3)
- 2009年十月 (3)
- 2009年九月 (5)
- 2009年八月 (4)
- 2009年七月 (6)
- 2009年六月 (8)
- 2009年五月 (8)
- 2009年四月 (16)
- 2009年三月 (19)
- 2009年二月 (22)
- 2009年一月 (20)
- 2008年十二月 (38)
- 2008年十一月 (22)
- 2008年十月 (7)
- 2008年九月 (3)
- 2008年八月 (24)

Jessica
