使用php的五个小技巧
php的一些小技巧,比较基础,总结一下,老鸟换个姿势飘过去就是。
1. str_replace
str_replace是非常常常常常用的php函数,用于字符串替换,经常看到某些php新人为了替换一批字符串,写了好多行str_replace,实在是惨不忍睹。
比如这个例子:
-
$str = '某人的栖息地 --- www.ooso.net';
-
$str = str_replace('某人', '坏人', $str);
-
$str = str_replace('的', 'di', $str);
-
$str = str_replace('栖息地', '猪窝窝', $str);
-
$str = str_replace('www.ooso.net', 'ooso.net', $str);
以上,替换了4次字符串,实际只要换个写法,一行就搞定了:
-
$str = '某人的栖息地 --- www.ooso.net';
-
$str = str_replace(array('某人', '的', '栖息地', 'www.ooso.net'), array('坏人', 'di', '猪窝窝', 'ooso.net'), $str);
2. array
经常看到有人拿数组这样写:
-
echo $arr[some_key];
上面这行代码能跑,看上去也没什么大问题,但是如果你把php.ini的error notice打开的话,会收到一大批error。php解析器首先是拿“some_key”当作一个常量来解释的,但如果没有定义some_key这样一个常量,解析器还是很宽容的把它当作了一个字符串来看待。因此新人同学们最好写完整一点:
-
echo $arr['some_key'];
这样就没有问题了,如果你要把它放在双引号中连用,也不能省掉引号,可以这样写:
-
echo "这是混在双引号中的字符串{$arr['some_key']}";
3. 类型戏法
类型戏法相当好用,比如有一个表单提交过来的变量,正常情况下它应该是整型的,有时候偷懒省去校验的写法可以是这样的:
-
$intVar = (int)$_POST['post_var'];
再比如数组,有时候写键值要打引号是不是很不爽啊,我们可以把它转换成object,比如:
-
$arr = array('name' => 'volcano', 'sex' => 'male');
-
$arr = (object)$arr;
-
-
echo $arr->name;
-
echo $arr->sex;
是不是很省事?
4. lambda函数
lamda函数和array_*系列函数使用有奇效,拿php手册上的一个例子来说:
-
<?php
-
$av = array("the ", "a ", "that ", "this ");
-
array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
-
print_r($av);
-
?>
至少省了一个for循环
5. 嵌套循环显示表格的单元格
嵌套循环显示表格的单元格,这是一个很老的话题哦,往往会要在某个单元格后边加个条件判断什么的,考虑是不是要输出tr抑或是td标签。
俺这里介绍一个办法,利用array_chunk函数能够比较工整的输出html,见下例,这个例子要输出一个4行6列的表格:
-
<?php
-
$arr = range(1, 24); //这个会生成一个数组array(1,2,3,4....24)
-
$arr = array_chunk($arr, 6);
-
-
// output table
-
?>
-
-
<table>
-
<?php foreach($arr as $row): ?>
-
<tr>
-
<?php foreach($row as $col):?>
-
<td><?php echo $col?></td>
-
<?php endforeach;?>
-
</tr>
-
<?php endforeach;?>
-
</table>
作者: Volcano 发表于May 25, 2007 at 8:22 am
piscdong 于 2007-05-25 @ 09:13:28 留言 :
关于第一条:有时候是有必要替换多次的,比如为了程序的可读性和可扩展性
volcano 于 2007-05-25 @ 09:28:25 留言 :
可读性跟这个不冲突
比如你可以写:
$replace = array(
'某人' => '坏人',
'的' => 'di',
'栖息地' => '猪窝窝',
'www.ooso.net' => 'ooso.net'
);
$str = str_replace(array_keys($replace), array_values($replace), $str);
Mimosa 于 2007-05-25 @ 10:29:43 留言 :
受益了~多谢分享经验。
piscdong 于 2007-05-25 @ 10:48:14 留言 :
怎么不能记住作者信息,每次都要重填
比如说,’的’ => ‘di’这一条想暂时不替换,但是以后可能会替换。用替换多次这种形式只要把这一行注释掉就可以了,以后再替换把注释删掉就可以了;替换一次这种形式就只能把这一行删掉,以后可能就忘了。
$str = str_replace(‘某人’, ‘坏人’, $str);
//$str = str_replace(‘的’, ‘di’, $str);
$str = str_replace(‘栖息地’, ‘猪窝窝’, $str);
$str = str_replace(‘www.ooso.net’, ‘ooso.net’, $str);
$replace = array(
‘某人’ => ‘坏人’,
‘栖息地’ => ‘猪窝窝’,
‘www.ooso.net’ => ‘ooso.net’
);
Mgccl 于 2007-05-25 @ 10:49:58 留言 :
类型戏法很有意思…
array变成Object是爽了.
不过这个比较适合有string key的array.
Object是不是内存和速度方面都比不上array?
piscdong 于 2007-05-25 @ 10:51:23 留言 :
再说一下评论的用户体验
1、前面说的,用户信息没有记录,每次都要重填
2、提交评论后才要求填验证码,验证后没有自动返回,也没有提供返回的链接
test 于 2007-05-25 @ 10:53:52 留言 :
测试
volcano 于 2007-05-25 @ 11:10:18 留言 :
to Mgccl:
一般的应用,瓶颈往往不在这种array或object上,往往是后端的db之类的会拖后腿。object对性能的影响反而可以忽略,俺在千万级的网站应用过,应无问题。
to piscdong:
广告评论太多,我不得以安装了Spam karma来屏蔽这些垃圾,副作用就是评论偶尔不太方便,应该不是每次都要输入验证码吧?我切换成未登录状态来验证这个问题,看看能否让评论的过程更顺畅。
volcano 于 2007-05-25 @ 11:12:26 留言 :
留下一行不替换,这个很好解决,看下面的例子:
$replace = array(
'某人' => '坏人',
//'的' => 'di',
'栖息地' => '猪窝窝',
'www.ooso.net' => 'ooso.net'
);
$str = str_replace(array_keys($replace), array_values($replace), $str);
piscdong 于 2007-05-25 @ 12:25:55 留言 :
原来这样也可以注释
边缘 于 2007-06-07 @ 09:45:18 留言 :
喜欢浏览你的文章,总是给人惊喜!
加油!Fighting
xLight 于 2007-06-09 @ 16:55:32 留言 :
4. lambda函数
看起来不是很易读
而且应该不会有效率提升
volcano 于 2007-06-10 @ 01:39:27 留言 :
用定界符能把lambda函数写的比较漂亮,可读
效率方面,未做细致的测试,但就实际使用而言,效率损失不大
longbill 于 2007-07-11 @ 12:37:41 留言 :
str_replace( array ( “字符串1″, “字符串2″) , “字符串3″, “原始字符串”);
这样可以把 字符串1 字符串2 全部换为 字符串3
将数组传到str_replace中是字符替换最快的方法。(我测试过的)
volcano 于 2007-07-11 @ 18:51:36 留言 :
str_replace替换字符本来就是有优势的
这个手册上都有写
元如枫 于 2009-03-21 @ 12:36:58 留言 :
多谢经验分享,收益良多,交换个友情链接,以后多向你请教问题啊。