个人总结php笔试题三
2017-08-10 09:00
176 查看
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.'<b 4000 r />'; 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); }
相关文章推荐
- 个人总结php笔试题四
- 个人总结php笔试题五
- 个人总结php笔试题二
- 个人总结php笔试题一
- 用php导入的个人总结
- php+mysql显示乱码的个人总结
- 最近准备php笔试的总结
- 关于excelphp的调用 导入导出(个人学习总结)
- PHP redis操作类 个人总结
- php开发个人微信公众号总结
- 用PHPExcel导出的个人总结
- 【面试笔试-php】某公司php方向面试题总结。
- php和mysql连接的个人总结
- PHP 之 面试题(笔试题总结)
- 对PHP中类、继承、抽象的理解(个人总结)
- PHP 正则表达式 个人笔记总结
- 笔试选择题总结3(个人总结)
- 编程笔试的一些坑(个人总结)
- php + mysql 获取数据库中的记录(特别是高效的分页功能) 完全个人经验总结,仅供参考!
- PHP多文件上传个人理解总结 [转]