随笔分类 -  PHP

PHP 传引用调用
摘要:我一直认为,基础数据类型都是传值调用,而具体的类都是传引用调用,其实没有传引用调用,所有的函数参数都是传值调用(除了PHP的&或指针调用)1$a = 1;test($a);echo $a;function test($a) { $a = 2; }输出的是 12$a = new Man;$a->age = 1;test($a)echo $a->age;class Man { public $age; }function test(Man $a) { $a->age = 2; }这里输出是23$a = new Man;$a->age = 1;test($a... 阅读全文
posted @ 2012-10-17 01:23 ZimZz 阅读(317) 评论(0) 推荐(0) 编辑
mysql_connect 与 memcache_connect
摘要:突然想到前段时间笔试的这一题,问你mysql_connect 与 memcache_connect 应该哪个在在前,哪个在后答案应该是先 memcache_connect 再 mysql_connect,因为memcache存在不稳定因素,容易发生阻塞,一旦memcache发生阻塞,如果是先mysql_connect,就会造成生成大量mysql空链接而无法释放一个类似的问题是 echo $html 和 mysql_connect应该哪个在前按照网上看到的以为叫caoz的朋友的说法,应该是mysql_connect在前,echo $html会等待网络传输,并发量高的时候会造成数据库链接的阻塞 阅读全文
posted @ 2012-10-15 02:40 ZimZz 阅读(329) 评论(0) 推荐(0) 编辑
Ubuntu 编译安装 Nginx PHP MySQL Memcached
摘要:先看一段转载,转载自nginx.cnnginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx本文以php-fpm为例介绍如何使nginx支持PHP一、编译安装php-fpm什么是PHP-FPMPHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进 阅读全文
posted @ 2012-10-14 01:35 ZimZz 阅读(1084) 评论(0) 推荐(0) 编辑
PHP 浅析PHP垃圾回收机制对内存泄露的处理
摘要:上次说到了refcount和is_ref,这里来说说内存泄露的情况$a = array(1, 2, &$a);unset($a);在老的PHP版本中,这里就会出现内存泄露,分析如下:执行第一行,可以知道$a和$a[2]指向的zval refcount=2,is_ref=1然后执行第二行,$a将会从符号表中被删除,同时指向的zval的refcount--,此时refcount=1,因为refcount!=0,故此zval不会被当做垃圾回收,但是此时我们却失去了$a[2]指向这个zval的入口,因此这个zval成了一块内存垃圾同样的道理可以发生在类内部引用里,例如$a = new Man( 阅读全文
posted @ 2012-10-12 15:45 ZimZz 阅读(998) 评论(0) 推荐(0) 编辑
PHP 浅析PHP的引用计数机制
摘要:PHP的变量声明并赋值后,变量名存在符号表中,而值和类信息存在zval中,zval中包含四个变量,is_ref,refcount,value,type,zval源码如下struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount__gc; zend_uchar type; /* active type */ zend_uchar is_ref__gc; }; refcount表示value地... 阅读全文
posted @ 2012-10-11 22:04 ZimZz 阅读(492) 评论(0) 推荐(0) 编辑
PHP 括号配对判断及修正
摘要:1 <?php 2 #判断输入的括号序列是否合法 3 #解决思路,如果在某一段出现了右括号数比左括号数大,则非法,否则到最后判断左括号和右括号是否相等即可 4 define("LEFT", "("); 5 define("RIGHT", ")"); 6 7 function validate($seq) { 8 $len = strlen($seq); 9 $left = 0;10 $right = 0;11 12 for ($i = 0; $i < $len; $i++) {13 ... 阅读全文
posted @ 2012-10-08 22:34 ZimZz 阅读(1095) 评论(0) 推荐(0) 编辑
PHP Catalan数的几个应用
摘要:1 <?php 2 #给定入栈序列,求出栈序列组合总数 3 #这是一个catalan数问题 4 #设共有n个数入栈,将入栈序列和出栈序列写在一起共有2n个数 5 #将第一个入栈的数作为基点,则第一个数肯定是在第2i+1的位置出栈 6 #否则第一个数入栈编号是0,如果是在2i,则在第一个数入栈和出栈之间共有2i-1个数,是奇数 7 #既然是奇数,则说明有数在第一个数出栈之前入栈却没有出栈,矛盾 8 #那么,我们可以找到地推规律,设f(2n)表示n个数的入栈出栈序列总数 9 #则 f(2n) = f(0)f(2n-2) + f(2)... 阅读全文
posted @ 2012-10-08 00:14 ZimZz 阅读(269) 评论(0) 推荐(0) 编辑
PHP 平分数组
摘要:1 <?php 2 /** 3 *一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值 4 *比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; 5 *{3,6}{2,4,3} m=2 6 *{3,3}{2,4}{6} m=3 所以m 的最大值为3 7 **/ 8 9 #解题思路10 #首先m必须满足两个条件11 #1. 1<=m<=n12 #2. sum(a) % m = 0,即sum(a)必须是m的倍数,其中a为待切分数组13 #解题步骤:14 #1. m... 阅读全文
posted @ 2012-10-07 19:47 ZimZz 阅读(2410) 评论(0) 推荐(0) 编辑
PHP 求链表并集
摘要:1 <?php 2 #合并两个非降序链表并去重,并且不能修改原链表数据 3 #非降序,则链表内部有可能重复 4 5 class Node { 6 public $data = null; 7 public $next = null; 8 } 9 10 function traverse($head) { 11 while ($head != null) { 12 echo $head->data . " "; 13 $head = $h... 阅读全文
posted @ 2012-10-06 21:53 ZimZz 阅读(486) 评论(0) 推荐(0) 编辑
词语搭配系统
摘要:1 <?php 2 /** 3 *设计一个系统处理词语搭配问题,比如说中国和人民可以搭配, 4 *则中国人民人民中国都有效。要求: 5 *系统每秒的查询数量可能上千次; 6 *词语的数量级为10W; 7 *每个词至多可以与1W 个词搭配 8 *当用户输入中国人民的时候,要求返回与这个搭配词组相关的信息。 9 **/10 11 /**12 *解决思路13 *假设10W的词语都是二字词语,UTF8存储,则每个词语占 2*3 bytes = 6 bytes14 *现在先对10W个词语建一棵二叉查找树,... 阅读全文
posted @ 2012-10-06 19:17 ZimZz 阅读(1857) 评论(0) 推荐(0) 编辑
PHP 串联珠子问题
摘要:1 <?php 2 #串连珠子问题(类似于关键字搜索) 3 4 function shortest_sub($a, $m) { 5 $color = array(); #用于存储当前子串某种颜色出现的次数,如color[0] = 2表示颜色0出现2次 6 $sum = 0; #用于存储当前子串共出现了几种颜色 7 $bstart = 0; #最短字串的开始坐标 8 $blen = count($a); #最短子串长度 9 10 #将color数组初始化为011 for ($i =... 阅读全文
posted @ 2012-10-06 01:48 ZimZz 阅读(285) 评论(0) 推荐(0) 编辑
PHP 有n 个长为m+1 的字符串, 如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接, 问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误
摘要:1 <?php 2 #有n个字符串,每个数组长度m+1,如果数组的后m个元素和另一个数组的前m个元素相同,则两个数组可以相连 3 #求n个数组中连接起来的最长路径是多少,如果遇到环路则报错退出 4 5 function longest($a, $m) { 6 $len = count($a); 7 #把二维数组$a的每个字符串元素看成一个节点 8 #建立节点之间的联通关系数组g,g[i][j]代表节点ij之间的最长路径 9 10 #初始化g,讲可连通的节点值设为111 $g = arra... 阅读全文
posted @ 2012-10-05 21:32 ZimZz 阅读(1254) 评论(0) 推荐(0) 编辑
PHP 队伍比赛问题
摘要:n 支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系, 存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j 的队伍中更强的一支。 所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中, 比如order[n] = {4,3,5,8,1......},那么第一轮比赛就是4 对3, 5 对8。....... 胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排, 下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4 对5,直至出现第一名 编程实现,给出二维数组w,一维数组order 和用于输出比赛名次 阅读全文
posted @ 2012-10-05 18:35 ZimZz 阅读(394) 评论(0) 推荐(0) 编辑
PHP 二叉树非递归遍历
摘要:1 <?php 2 #二叉树的非递归遍历 3 class Node { 4 public $data; 5 public $left; 6 public $right; 7 } 8 9 #前序遍历,和深度遍历一样10 function preorder($root) {11 $stack = array();12 array_push($stack, $root);13 while (!empty($stack)) {14 $cno... 阅读全文
posted @ 2012-10-05 03:23 ZimZz 阅读(1980) 评论(0) 推荐(0) 编辑
PHP 输入n,判断从1~n序列中十进制数里1出现的次数
摘要:1 <?php 2 #输入n,判断从1~n序列中十进制数里1出现的次数 3 #例如输入12,则含有1的数字有1,10,11,12, 这里1一共出现了5次 4 5 #判断十进制数出现1的次数 6 function count1dec($x) { 7 $i = 1; 8 $count = 0; 9 10 #从个位数开始获取x的每一位数,并判断是不是111 while ($x >= pow(10, $i - 1)) {12 $r = floor($x % pow(10,... 阅读全文
posted @ 2012-10-03 16:39 ZimZz 阅读(411) 评论(0) 推荐(0) 编辑
PHP 输入两个整数序列。其中一个序列表示栈的push 顺序, 判断另一个序列有没有可能是对应的pop 顺序
摘要:<?php #输入一个栈的压栈序列和一个弹栈序列,判断该弹栈序列是否可能是压栈序列的输出 #例如压栈序列 12345,则弹栈序列可以是 54321 或者 45321 #解题思路,建一个空栈,按照压栈序列入栈,当压入的栈顶元素与弹栈序列的指针指向元素相同时,将元素弹出 #直到将压栈序列的元素全部压完,如果弹栈序列是正确的,则最后栈内元素可以按照弹栈序列顺序弹出,最后栈为空 #否则栈不为空 function test($push, $pop) { $len = count($push); $stack = array(); ... 阅读全文
posted @ 2012-10-02 20:55 ZimZz 阅读(766) 评论(0) 推荐(0) 编辑
PHP 输入一个整数,求该整数的二进制表达中有多少个1
摘要:1 <?php 2 #计算某个二进制数共有几个1 3 #例如十进制11 = 二进制1011,则结果是3个1 4 5 #解题思路:利用 n & (n - 1) 可以将最后一个1变0 6 # xxxx1000 & (xxxx1000 - 1) = xxxx1000 & xxxx0111 = xxxx0000 7 # 1011 & (1011 - 1) = 1011 & 1010 = 1010 8 #直到最后一个1被与为0,得出结果 9 10 function count1($n) {11 $r = 0;12 ... 阅读全文
posted @ 2012-10-02 19:13 ZimZz 阅读(1821) 评论(0) 推荐(0) 编辑
PHP 跳台阶问题
摘要:1 <?php 2 #跳台阶问题 3 #规定跳台阶有两种跳法,一次跳1阶或一次跳2阶,问有n个台阶共有几种跳法 4 #如果n=1,则只有一种跳法,n=2有两种跳法-一次跳1阶,一次跳2阶 5 #如果n > 2时,可以分为两种情况,第一种是第一次跳1阶,那么剩下的跳法就是f(n - 1)种了 6 #第二种是第一次跳2阶,那么剩下的跳法就是f(n - 2)种,则f(n) = f(n - 1) + f(n - 2) 7 #于是有递推公式 8 # | 1 n = 1 9 # f(n) = < 2 n = 2... 阅读全文
posted @ 2012-10-02 19:00 ZimZz 阅读(441) 评论(0) 推荐(0) 编辑
PHP 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来
摘要:1 <?php 2 #输入sum和n,要求输出1,2...n里所有和为sum的组合 3 #这是一个可划分子问题问题 4 #若用f(sum, n)表示问题的界,则元素组合共有两种情况 5 #1. 和为sum的组合里包括n,则f(sum, n) = f(sum - n, n - 1) 6 #2. 和为sum的组合里不包括n,则 f(sum, n) = f(sum, n - 1) 7 #所以 f(sum, n) = f(sum - n, n - 1) U f(sum, n - 1) 8 9 function combination($sum... 阅读全文
posted @ 2012-10-02 13:56 ZimZz 阅读(1181) 评论(0) 推荐(0) 编辑
PHP Fabonacci数列
摘要:1 <?php 2 #Fibonacci数列问题 3 #f(1) = 1 4 #f(n) = f(n - 1) + f(n - 2) 5 #求f(n) 6 7 #递归方法 8 function fibonacci($n) { 9 if ($n == 0) {10 return 0;11 }12 13 if ($n == 1) {14 return 1;15 }16 17 return fibonacci($n - 1... 阅读全文
posted @ 2012-10-01 23:09 ZimZz 阅读(359) 评论(0) 推荐(0) 编辑