之前已经分析过strtr的源码了,现在就比较strtr, str_replace和preg_replace的效率:$str =
'111111110000000000000000000000000000000111000001000100010000010010000010010000010100000010
';
$str = str_repeat($str, 1);
$pattern1 = array('12345'=>'', '67891'=>'');
$pattern2 = array('a'=>'', '1234567890'=>'');
$pattern3 = '/12345|67891/';
$pattern4 = '/a|1234567890/';
$pattern5 = array('12345', '67891');
$pattern6 = array('a', '1234567890');
$t = microtime(true);
for($i=0; $i阅读全文>
发表于 @ 2009年12月30日 21:23:00 | 评论( loading... ) | 举报| 收藏
strtr的乱码问题:strtr('中华人民共和国中华人民共和国', '中国', 'abc def32(#@$');输出:abc ��a��民 �� �� deabc ��a��民 �� �� de 原因:因为strtr在字符串替换的时候是以单个字节对应进行替换的(http://blog.csdn.net/yycai/archive/2009/12/26/5082729.aspx),所以对于非单字节编码的数据(如中文utf-8)就可以会出现乱码。 改成使用str_replace, preg_replace或者strtr(string, array) strtr的效率问题://环境:Windows XP + PHP5.3
$str = '111111110000000000000000000000000000000111000001000100010000010010000010010000010100000010';
$str = str_repeat($str, 1);
阅读全文>
发表于 @ 2009年12月30日 21:14:00 | 评论( loading... ) | 举报| 收藏
在smarty中使用自定义插件来加载数据(见:http://blog.csdn.net/yycai/archive/2009/12/26/5083594.aspx)在使用的时候阅读全文>
发表于 @ 2009年12月28日 17:41:00 | 评论( loading... ) | 举报| 收藏
之前使用smarty的时候,通常是在php程序端读取数据(一般从数据库),然后assign给模板的变量,才可以在前端使用这个变量。这样不是不好,只是数据多的时候php端的代码维护起来有点麻烦,特别是当存在很多模板块化得数据时。
所以写了个插件,结合之前的crud类实现在前端模板可以加载一些模块化得数据。
(http://code.google.com/p/cyy0523xc/source/browse/trunk/php/function.load_data.php)
* Name: eval
* Purpose: evaluate a template variable as a tem阅读全文>
发表于 @ 2009年12月26日 23:15:00 | 评论( loading... ) | 举报| 收藏
最近经常要对字符串进行匹配和替换操作,之前一般使用str_replace或者preg_replace,据说strtr的效率不错,所以对比了一下:
$i = 0;
$t = microtime(true);
for(;$i
结果显示,strtr的效率比preg_replace高约15%左右。
趁着周末,查看了strtr的php源码:
PHP_FUNCTION(strtr)
{
阅读全文>
发表于 @ 2009年12月26日 20:39:00 | 评论( loading... ) | 举报| 收藏
之前写的crud类实在比较简单(http://blog.csdn.net/yycai/archive/2009/12/15/5012353.aspx),重新封装了一下:
* $db = cls_crud::factory(array('table'=>'article'));
* $data = $db->get_block_list(array('category_id' => 3), 9);
*
* $data = $db->get_list(array('title', 'id', 'time'), array('category_id'=>$cid), 'time', 1, $_GET['page'], 2, 1);
* $page_html = $db->page->get_html("?action=list&cid={$cid}", 'ylmf-page');
*
*
* @author 小阅读全文>
发表于 @ 2009年12月22日 17:18:00 | 评论( loading... ) | 举报| 收藏
因为项目需要,所以自己写了一个CRUD类虽然还比较简单,不过感觉很实用。注:cls_database是一个数据库操作类
* @version 1.0
*/
class cls_crud extends cls_database
{
/**
* 数据表名
* @var string
*/
private $table = '';
/**
* 构造函数
* @param array $config 配置变量
*/
public function __construct($config)
{
if(!empty($config))
{
foreach($config as $阅读全文>
发表于 @ 2009年12月15日 16:24:00 | 评论( loading... ) | 举报| 收藏
FIT/WeFIT 开发者冯华君采访
Lawrence Li on 2008-02-23,00:06
http://apple4.us/2008/02/fit-wefit.html
iPhone 上的全局中文输入法(即能够在所有程序中使用的输入法)目前有三种:NativeCn、iCosta 和 WeFIT。由香港人 Gary 和 iczfirz 开发的 NativeCN 利用了 iPhone 本身内置的日文输入键盘,将中文输入码表嵌入其中实现全局中文输入;身处上海的 Holly Lee 和 Pinxue 在徐家汇的 Costa 咖啡馆里写出了 iCosta。它「本质上是一个附加库,通过 dyld 在启动 SpringBoard 时被自动载入, 并通过覆盖(override)部分方法来实现中文输入」(n000b 语);WeFIT 的情况有些特殊,它由麦金塔平台上最受欢迎的中文输入法之一 Fun Input Toy (FIT) 衍生而来。FIT 的人气为 WeFIT 带来了惊人的期待值,从一开阅读全文>
发表于 @ 2009年11月21日 16:01:00 | 评论( loading... ) | 举报| 收藏
转自:http://www.chinaz.com/news/Visit/091Y21R2009.html
Rasmus Lerdorf可能是格陵兰最著名的电脑牛人,他1995年创建了PHP脚本语言,并成功应用到他的网站中,在他的一手栽培下,PHP已变成一个强大的,完全成熟的语言,目前世界各地已有数百万PHP应用案例。
PHP创始人Rasmus Lerdorf
Linux Format杂志对Rasmus Lerdorf做了一次专访,为我们揭开Rasmus Lerdorf现在在PHP社区的地位,以及早期他是如何决策的,才让PHP实现了今天的巨大成功。
Linux Format(后面简称为LXF):你目前参与了多少PHP的开发?
Rasmus Lerdorf(后面简称为RL):现在比10或15年前少多了,但我现在每天仍坚持阅读邮件列表,讨论功能和偶尔修复一下BUG。我个人对安全和性能相关的问题更感兴趣。
LXF:PHP团队的组织结构是什么样的?现在看起来似乎不太清晰…阅读全文>
发表于 @ 2009年09月21日 08:24:00 | 评论( loading... ) | 举报| 收藏
自从认识mysql的那天起就知道varchar的长度限制为255,不过现在这种情况已经改变了:
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535. The effective maximum length of a VARCHAR is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used.
In contrast to CHAR, VARCHAR values are stored as a one-byte or two-byte length prefix plus data. The length prefix indicates the number of bytes in the val阅读全文>
发表于 @ 2009年09月17日 20:30:00 | 评论( loading... ) | 举报| 收藏
php手册告诉我们,require和include只是在对错误信息的处理上有所差别。可是自己记性不好,经常忘记,所以今天就把php内核源码认真的查看了一下,具体的过程记录在这里了:http://code.google.com/p/cyy0523xc/source/browse/trunk/%E5%AD%A6%E4%B9%A0/PHP%E5%86%85%E6%A0%B8_include_and_require.txt关键是在zend_language_scanner.l文件中的这段代码:// require与include的差别只是在此:错误信息的显示级别if (type==ZEND_REQUIRE) { //require时zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename TSRMLS_CC);zend_bailout();} else {zend_me阅读全文>
发表于 @ 2009年08月21日 02:34:00 | 评论( loading... ) | 举报| 收藏
对于我们做php开发的来说,empty函数(注,其实empty是一个语言结构而非函数,这里说函数只是个人习惯)是再熟悉不过的一个函数了,查PHP的手册描述如下:Determine whether a variable is considered to be empty.但是在我的记忆中,有很长一段时间一直以为empty应该是能够判断一个东西是否为空的,直到有一天我像这样“empty(trim($a))”使用的时候出现了error,然后查手册才知道了原来empty函数只能判断一个变量是否为空,而不能判断一个字符串(或者其他的值,包括函数返回值)为空。虽然知道了这只是一个表层的原因,但是却没有再去了解深层次的原因。最近对php内核产生了兴趣,又再次想起了这个问题,于是按照别人的经验写了以下一段代码:";$tokens = token_get_all('');foreach($tokens as $t){ if (is_array($t)){ printf("%s \t %s 阅读全文>
发表于 @ 2009年08月10日 01:58:00 | 评论( loading... ) | 举报| 收藏
从建房子说起 记得小时候,我爸,大伯,叔叔都是在祖屋里住着的,后来我爸和叔叔都在村子里建了房子,都搬出来了。这也是很顺理成章的事情,因为原有的祖屋已经不足以住下我们的一大家子人了。 不过,这时就会有一个问题,就是在不知情也没有其他信息的前提下,怎么根据姓名来判断他是住在祖屋还是新屋呢?最简单最笨的方法,当然是先在祖屋找,没找到就再到新屋找,但是新屋比较多或者两个屋子之间相距比较远的话,这个成本就变得很高,不合算。 为了降低这个成本,我们可以事先用一个本子(索引表)记录下每个人住在哪里,这样只要一查本子就知道了。逐步分表 和房子不够就需要重新建一处房子一样,当一个数据表记录太多太大,从而影响了查询效率的时候,我们就应该考虑分表,把新增的数据都保存到另一个表上,依次进行下去。和上面找人的问题一样,我们应该有一个什么样的策略来判断某个ID的记录在那个表上。这里有几种方式:一:把记录ID和数据表名的对应关系保存在一个独立的表(找人问题中的本子)中,可是这样当记录很多的时候这个表的记录阅读全文>
发表于 @ 2009年08月07日 22:09:00 | 评论( loading... ) | 举报| 收藏
今天发现了php有个自然排序的函数----natsort,第一次听说了原来还有一种叫做“自然排序”的算法,很好奇,官方手册(http://us.php.net/manual/en/function.natsort.php).....阅读全文>
发表于 @ 2009年08月01日 12:57:00 | 评论( loading... ) | 举报| 收藏
转自:http://www.coolcode.cn/show-170-1.html前言概述NULL 和标量类型的序列化简单复合类型的序列化嵌套复合类型的序列化自定义对象序列化Unicode 字符串的序列化参考文献1.前言
PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize、unserialize。不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列化结果的格式却没做任何说明。因此,这对在其他语言中实现 PHP 方式的序列化来说,就比较麻烦了。虽然以前也搜集了一些其他语言实现的 PHP 序列化的程序, 不过这些实现都不完全,当序列化或反序列化一些比较复杂的对象时,就会出错了。于是我决定写一份关于 PHP 序列化格式详解的文档(也就是这一篇文档),以便在编写其他语言实现的 php 序列化程序时能有一个比较完整的参考。这篇文章中所写的内容是我通过编写程序测试和阅读 PHP 源代码得到的,所以,我不能 100% 保证所有的内容都是正确的,不过我会尽量保证我所写下的内容的正确性,对于我还不太清楚的地方,我会在文中阅读全文>
发表于 @ 2009年08月01日 00:41:00 | 评论( loading... ) | 举报| 收藏