经典PHP笔试题

时间:2022-09-05 22:51:58

1.考虑如下脚本。标记处应该添加什么代码才能让脚本输出字符串php?

$alpha = 'abcdefghijklmnopqrstuvwxyz';

$letters = array(15, 7, 15);

foreach($letters as $val)

{/* 这里应该加入什么 */

}?>

A.echo chr($val);

B.echo asc($val);

C.echo substr($alpha, $val, 2);

D.echo $alpha{$val};

E.echo $alpha{$val+1}

答案解析:substr 函数能够胜任,但考虑到输出三个字母就需要三次调用该函数,所以排除此方法。那么$alpha{$val}和$alpha{$val+1}是仅有的两个可能输出题目要求的字符串的选项。因为 0 是数 组的第一个索引,所以答案是 D。

2. 以下哪一项不能把字符串$s1 和$s2 组成一个字符串?

A.$s1 + $s2

B.”{$s1}{$s2}”

C.$s1.$s2

D.implode(”, array($s1,$s2))

E.以上都可以

答案解析:除 A 以外的选项都能输出题目要求的字符串。PHP中,加号+不能把两个字符串合并成一个。

3. 变 量 $email 的 值 是 字 符 串 user@example.com , 以 下 哪 项 能 把 字 符 串 转 化 成example.com?

A.substr($email, strpos($email, “@”));

B.strstr($email, “@”);

C.strchr($email, “@”);

D.substr($email, strpos($email, “@”)+1);

E.strrpos($email, “@”);

答案解析:substr 函数返回字符串的一部分,而 strpos 函数擅长从一个字符串中找出某个指定的子串。同时使用这两个函数将满足题目要求。注意,前一个函数从 0 开始索引,而后者不是,因此需 要+1。答案是 D。

4. 给定一个用逗号分隔一组值的字符串,以下哪个函数能在仅调用一次的情况下就把每个独立的值放入一个新创建的数组?

A.strstr()

B.不可能只调用一次就完成

C.extract()

D.explode()

E.strtok()

答案解析:答案是 D。explode 函数使用一个字符串分隔另一个字符串,并把结果放入一个新建的数组。strtok 函数也可以做同样的事,但需要多次调用。

5. 要比较两个字符串,以下那种方法最万能?

A.用 strpos 函数

B.用==操作符

C.用 strcasecmp()

D.用 strcmp()

答案解析:答案是 D。strcmp()提供了安全的字符串比较机制。注意,选项 C 是错的,strcasecmp()不是一个“万能”函数,因为它不区分大小写。

6. 以下哪个 PCRE 正则表达式能匹配字符串 php|architect?

A..*

B.…|………

C.\d{3}\|\d{8}

D.[az]{3}\|[az]{9}

E.[a-z][a-z][a-z]\|\w{9}

答案解析:选项中没有一个正则表达式能真正代表题目所给字符串的匹配方式,但是选项 A 和 E仍然能勉强匹配。选项 A 太普通了,它能够匹配任何字符串,因此答案是 E。

7. 以下哪些函数能用来验证字符串的完整性?(三选)

A.md5()

B.sha1()

C.str_rot13()

D.crypt()

E.crc32()

答案解析:正确答案是 A,B 和 E。用 crypt()和 str_rot13()来验证一个字符串是否被改变,效率很低。crc32()比前面两个函数好些,如果能容忍一些小错误的话,它是个不错的选择。

8. 哪个 PHP 函数与以下脚本在 UNIX 系统下执行的效果近似?

function my_funct ($filename) {

$f = file_get_contents ($filename);

return explode ("\n", $f); } ?>

A.fopen()

B.fread()

C.flock()

D.split_string()

E.file()

答案解析:正确答案是 A,B 和 E。用 crypt()和 str_rot13()来验证一个字符串是否被改变,效率很低。crc32()比前面两个函数好些,如果能容忍一些小错误的话,它是个不错的选择。

9. 基于指定的式样(pattern)把一个字符串分隔开并放入数组,以下哪些函数能做到?(双 选)

A.preg_split()

B.ereg()

C.str_split()

D.explode()

E.chop()

答案解析:尽管条件不同,但 preg_split 和 explode 函数都能满足题目要求。ereg()拿一个正则表达式匹配一个字符串;str_split()按固定长度分隔字符串;而 chop()则是 rtrim()别名,用来移除 字符串末尾处的空格。

10.以下脚本输出什么?<? echo 'Testing ' . 1 + 2 . '45'; ?>

A.Testing 1245

B.Testing 345

C.Testing 1+245

D.245

E.什么都没有

答案解析:本题考察你对字符串操作及操作符优先级的认识。连接运算符(.)的优先级比加号(+)高。因此 PHP 解释器实际执行的运算可以表示为(‘Testing’ . 1) + (2 . ‘45’)。由于字符串 test 1 不是数字,所以加号前面的运算等于 0。加号后面的运算等于 245,PHP 输出的结果是 0+245,等于 245,所以答案是 D。

11.以下脚本输出什么?<? $s = '12345'; $s[$s[1]] = '2'; echo $s; ?>

A.12345

B.12245

C.22345

D.11345

E.Array

答案解析:可以用访问数组元素的方式访问字符串中的字符,因此脚本只是把字符串中的第二个字符($s[1])替换成了字符 2,最终将输出 12245。答案是 B。

12.方框中的正则表达式能与以下哪些选项匹配?(双选) /.*\*123\d/

A.******123

B.*****_1234

C.******1234

D._*1234

E._*123

答案解析:本题的要点是理解这个正则表达式的含义——从左往右,首先是零个或多个任意字符(.*),跟着是一个星号(\*),然后是 123,最后是一个数字。因此答案是 C 和 D。

13.以下哪个比较将返回 true?(双选)

A.‘1top’ == ‘1’

B.‘top’ == 0

C.‘top’ === 0

D.‘a’ == a

E.123 == ‘123’

答案解析:B 和 E 正确。选项 B 中,在比较时,字符串 top 等同于数字 0。==操作符不比对数据类型,所以将返回 true。答案 E 中,字符串 123 等同于数字 123,比较将返回 true。

14.如果用+操作符把一个字符串和一个整型数字相加,结果将怎样?

A.解释器输出一个类型错误

B.字符串将被转换成数字,再与整型数字相加

C.字符串将被丢弃,只保留整型数字

D.字符串和整型数字将连接成一个新字符串

E.整形数字将被丢弃,而保留字符串

答案解析:字符串将被转换成数字(如果无法发生转换就是 0),然后与整型数字相加。答案是 B。

15.考虑如下脚本。假设 http://www.php.net 能被访问,脚本将输出什么?

<? $s = file_get_contents ("http://www.php.net"); strip_tags ($s, array ('p')); echo count ($s); ?>

A.www.php.net 的主页的字符数

B.剔除标签后的 www.php.net 主页的字符数

C.1

D.0

E.剔除以外的标签后的 www.php.net 主页的字符数

答案解析:代码的本意是剔除 www.php.net 主页上除了 p 以外的的所有 HTML 标签。可实际上,在代码的最后一行使用了 count 函数,它统计变量中的元素数量,而不是字符串中的字符数。由于字符 串是标量,对字符串使用 count 函数将永远返回 1。答案是 C。

16.哪个函数能不区分大小写得对两个字符串进行二进制比对?

A.strcmp()

B.stricmp()

C.strcasecmp()

D.stristr()

E.以上都不能

答案解析:题目其实就是在描述 strcasecmp 函数的作用,因此答案是 C。

17.以下哪些函数能把字符串里存储的二进制数据转化成十六进制?(双选)

A.encode_hex()

B.pack()

C.hex2bin()

D.bin2hex()

E.printf()

答案解析:正确答案是 B 和 D。pack 函数能对二进制数据进行复杂的格式化,包括将字符串中的字符转化成十六进制表示。bin2hex 函数也有同样的转化功能。注意,printf()能将整数转化成十六进 制数,但无法转化字符串。

18.哪个函数能用来确保一个字符串的字符数总是大于一个指定值?

答案解析:这是在说 str_pad 函数,它可以把字符串填充到指定长度。

19.以下脚本输出什么? <? $a = 'able osts indy'; echo wordwrap ($a, 1, "c", false); ?>

答案解析:脚本将输出 ablecostscindy。wordwrap 函数通常用来把字符串切割成指定长度。然而在本题中,长度被设置为 1,因此函数将从空格处切割(第四个参数被设置为 false,因此函数不会从 单词的中间进行切割)。填充字符串是 c,等于把每个空格都换成了 c。

20.以下脚本输出什么? <?$x = 'apple'; echo substr_replace ($x, 'x', 1, 2); ?>

A.x

B.axle

C.axxle

D.applex

E.xapple

答案解析:脚本将输出 ablecostscindy。wordwrap 函数通常用来把字符串切割成指定长度。然而在本题中,长度被设置为 1,因此函数将从空格处切割(第四个参数被设置为 false,因此函数不会从 单词的中间进行切割)。填充字符串是 c,等于把每个空格都换成了 c。