使用php的五个小技巧

php的一些小技巧,比较基础,总结一下,老鸟换个姿势飘过去就是。

1. str_replace

str_replace是非常常常常常用的php函数,用于字符串替换,经常看到某些php新人为了替换一批字符串,写了好多行str_replace,实在是惨不忍睹。

比如这个例子:

PHP:
  1. $str = '某人的栖息地 --- www.ooso.net';
  2. $str = str_replace('某人', '坏人', $str);
  3. $str = str_replace('的', 'di', $str);
  4. $str = str_replace('栖息地', '猪窝窝', $str);
  5. $str = str_replace('www.ooso.net', 'ooso.net', $str);

以上,替换了4次字符串,实际只要换个写法,一行就搞定了:

PHP:
  1. $str = '某人的栖息地 --- www.ooso.net';
  2. $str = str_replace(array('某人', '的', '栖息地', 'www.ooso.net'), array('坏人', 'di', '猪窝窝', 'ooso.net'), $str);

2. array

经常看到有人拿数组这样写:

PHP:
  1. echo $arr[some_key];

上面这行代码能跑,看上去也没什么大问题,但是如果你把php.ini的error notice打开的话,会收到一大批error。php解析器首先是拿“some_key”当作一个常量来解释的,但如果没有定义some_key这样一个常量,解析器还是很宽容的把它当作了一个字符串来看待。因此新人同学们最好写完整一点:

PHP:
  1. echo $arr['some_key'];

这样就没有问题了,如果你要把它放在双引号中连用,也不能省掉引号,可以这样写:

PHP:
  1. echo "这是混在双引号中的字符串{$arr['some_key']}";

3. 类型戏法

类型戏法相当好用,比如有一个表单提交过来的变量,正常情况下它应该是整型的,有时候偷懒省去校验的写法可以是这样的:

PHP:
  1. $intVar = (int)$_POST['post_var'];

再比如数组,有时候写键值要打引号是不是很不爽啊,我们可以把它转换成object,比如:

PHP:
  1. $arr = array('name' => 'volcano', 'sex' => 'male');
  2. $arr = (object)$arr;
  3.  
  4. echo $arr->name;
  5. echo $arr->sex;

是不是很省事?

4. lambda函数

lamda函数和array_*系列函数使用有奇效,拿php手册上的一个例子来说:

PHP:
  1. <?php
  2. $av = array("the ", "a ", "that ", "this ");
  3. array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
  4. print_r($av);
  5. ?>

至少省了一个for循环

5. 嵌套循环显示表格的单元格

嵌套循环显示表格的单元格,这是一个很老的话题哦,往往会要在某个单元格后边加个条件判断什么的,考虑是不是要输出tr抑或是td标签。

俺这里介绍一个办法,利用array_chunk函数能够比较工整的输出html,见下例,这个例子要输出一个4行6列的表格:

PHP:
  1. <?php
  2. $arr = range(1, 24); //这个会生成一个数组array(1,2,3,4....24)
  3. $arr = array_chunk($arr, 6);
  4.  
  5. // output table
  6. ?>
  7.  
  8. <table>
  9. <?php foreach($arr as $row): ?>
  10. <tr>
  11.   <?php foreach($row as $col):?>
  12.   <td><?php echo $col?></td>
  13.   <?php endforeach;?>
  14. </tr>
  15. <?php endforeach;?>
  16. </table>

作者: Volcano 发表于May 25, 2007 at 8:22 am

版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原始出处作者信息及此声明

Tags:

16 条评论 »

  1. piscdong 于 2007-05-25 @ 09:13:28 留言

    关于第一条:有时候是有必要替换多次的,比如为了程序的可读性和可扩展性

  2. 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);

  3. Mimosa 于 2007-05-25 @ 10:29:43 留言

    受益了~多谢分享经验。

  4. 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’
    );

  5. Mgccl 于 2007-05-25 @ 10:49:58 留言

    类型戏法很有意思…
    array变成Object是爽了.
    不过这个比较适合有string key的array.
    Object是不是内存和速度方面都比不上array?

  6. piscdong 于 2007-05-25 @ 10:51:23 留言

    再说一下评论的用户体验
    1、前面说的,用户信息没有记录,每次都要重填
    2、提交评论后才要求填验证码,验证后没有自动返回,也没有提供返回的链接

  7. test 于 2007-05-25 @ 10:53:52 留言

    测试

  8. volcano 于 2007-05-25 @ 11:10:18 留言

    to Mgccl:
    一般的应用,瓶颈往往不在这种array或object上,往往是后端的db之类的会拖后腿。object对性能的影响反而可以忽略,俺在千万级的网站应用过,应无问题。

    to piscdong:
    广告评论太多,我不得以安装了Spam karma来屏蔽这些垃圾,副作用就是评论偶尔不太方便,应该不是每次都要输入验证码吧?我切换成未登录状态来验证这个问题,看看能否让评论的过程更顺畅。

  9. 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);

  10. piscdong 于 2007-05-25 @ 12:25:55 留言

    原来这样也可以注释

  11. 边缘 于 2007-06-07 @ 09:45:18 留言

    喜欢浏览你的文章,总是给人惊喜!

    加油!Fighting

  12. xLight 于 2007-06-09 @ 16:55:32 留言

    4. lambda函数

    看起来不是很易读
    而且应该不会有效率提升

  13. volcano 于 2007-06-10 @ 01:39:27 留言

    用定界符能把lambda函数写的比较漂亮,可读
    效率方面,未做细致的测试,但就实际使用而言,效率损失不大

  14. longbill 于 2007-07-11 @ 12:37:41 留言

    str_replace( array ( “字符串1″, “字符串2″) , “字符串3″, “原始字符串”);
    这样可以把 字符串1 字符串2 全部换为 字符串3

    将数组传到str_replace中是字符替换最快的方法。(我测试过的)

  15. volcano 于 2007-07-11 @ 18:51:36 留言

    str_replace替换字符本来就是有优势的

    这个手册上都有写

    If you don’t need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace().

  16. 元如枫 于 2009-03-21 @ 12:36:58 留言

    多谢经验分享,收益良多,交换个友情链接,以后多向你请教问题啊。

RSS 为此帖反馈评论 · 反向跟踪 网站

留条评论