个人总结php笔试题三

来源:互联网 发布:如何做数据分析研究 编辑:程序博客网 时间:2024/06/08 05:28

7.PHP中empty()和isset()区别

empty
如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

isset

如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。

is_null

检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】


8.for和foreach哪个更快

foreach更快些。
总体来说,如果数据库过几十万了,才能看出来快一点还是慢一点,如果低于10万的循环,就不用测试了。php推荐用foreach。

循环数字数组时,for需要事先count($arr)计算数组长度,需要引入自增变量$i,每次循环都要进行条件判断$i<$c,然后自增$i++,输出数组元素时,$arr[$i]需要进行哈希操作.

而foreach循环数组时,指针会自动指向下一个元素,不需要计算数组长度,没有条件判断和自增变量,调用元素时也没有哈希操作,所以性能肯定要比for和while高.另外,for和while对存在键值映射的关联数组无能为力.所以,遍历数组,首选foreach.foreach也是我PHP里最喜欢的关键字,因为它确实强大.array_map/array_filter/array_walk遍历数组的方式和foreach一样,但需要执行回调函数,所以也比foreach慢.

参考:http://www.cnblogs.com/niniwzw/archive/2008/06/03/1212535.html


9.php的内存管理机制和垃圾回收机制

php的内存管理机制是:预先给出一块空间,用来存储变量,当空间不够时,再申请一块新的空间。
垃圾回收:
1.在5.2版本或之前版本,PHP会根据refcount值来判断是不是垃圾
如果refcount值为0,PHP会当做垃圾释放掉
这种回收机制有缺陷,对于环状引用的变量无法回收
2.在5.3之后版本改进了垃圾回收机制
如果发现一个zval容器中的refcount在增加,说明不是垃圾
如果发现一个zval容器中的refcount在减少,如果减到了0,直接当做垃圾回收
如果发现一个zval容器中的refcount在减少,并没有减到0,PHP会把该值放到缓冲区,当做有可能是垃圾的怀疑对象。

当缓冲区达到了临界值,PHP会自动调用一个方法去遍历每一个值,如果发现是垃圾就清理


参考地址:http://www.cnblogs.com/zk0533/p/5667122.html

10.不用中间变量把两个值互换

/字符串版本 结合使用substr,strlen两个方法实现
$a="a";$b="b";echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a.=$b;$b=substr($a,0,(strlen($a)-strlen($b)));$a=substr($a, strlen($b));echo '交换后$a:'.$a.',$b:'.$b.'<br />';echo '-----------------------<br/>';

//字符串版本 使用str_replace方法实现

$a="a";$b="b";echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a.=$b;$b=str_replace($b, "", $a);$a=str_replace($b, "", $a);echo '交换后$a:'.$a.',$b:'.$b.'<br />';echo '-----------------------<br/>';

//字符串版本 结合使用list方法和array实现
$a="a";$b="b";echo '交换前 $a:'.$a.',$b:'.$b.'<br />';list($b,$a)=array($a,$b);echo '交换后$a:'.$a.',$b:'.$b.'<br />';echo '-----------------------<br/>';

//字符串和数字都适用 使用异或运算
$a='a';$b='b';echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a=$a^$b;$b=$b^$a;$a=$a^$b;echo '交换后$a:'.$a.',$b:'.$b.'<br />';echo '-----------------------<br/>';

//只适用于数字

$a=3;$b=5;echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a=$a+$b;$b=$a-$b;$a=$a-$b;echo '交换后$a:'.$a.',$b:'.$b.'<br />';


11.输入一行字符,分别计算其中英文字母,空格和数字的个数

echo $str = " a b1c你 2好 34 ^&*5";preg_match_all("/[0-9]{1}/",$str,$arrNum);preg_match_all("/[a-zA-Z]{1}/",$str,$arrAl);preg_match_all("/([/x{4e00}-/x{9fa5}]){1}/u",$str,$arrCh);$length = strlen($str)-(count($arrNum[0])+count($arrAl[0])+count($arrCh[0]));for ($i=0;$i<strlen($str);$i++){     if($str[$i] == " " ||$str[$i] == " "){           $num ++;     }}echo "字母个数:".count($arrAl[0])."<br/>";echo "中文个数:".count($arrCh[0])."<br/>";echo "空格个数".$num."<br/>";echo "数字个数:".count($arrNum[0])."<br/>";echo "其他字符个数:".$length;


12.编写一个程序,用1,2,3,这三个数能组成多少互不相同且不重复的三位数,都是多少?

        $i = $j = $k = $t = 0;         for ($i = 1; $i <= 4; $i++) {            for ($j = 1; $j <= 4; $j++) {                for ($k = 1; $k <= 4; $k++) {                    if ($i != $j && $j != $k && $i != $k) {                        $t+=1;                        dump($i * 100 + $j * 10 + $k);                    }                }            }        }        dump('总数:' . $t);


13.编写一个程序,输入n求n!(用递归处理)

    public function test($n) {        if ($n == 0 || $n == 1)            return 1;        else            return $n * $this->test($n - 1);    }



原创粉丝点击