您的位置:首页 > 编程语言 > PHP开发

个人总结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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: