經典php面試題
1.考慮如下指令碼。標記處應該新增什麼程式碼才能讓指令碼輸出字串php?
$alpha = 'abcdefghijklmnopqrstuvwxyz';
$letters = array(15, 7, 15);
foreach($letters as $val)
{/* 這裡應該加入什麼 */
}?>
A.echo chr($val);
B.echo $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 的 值 是 字 符 串 [email protected] , 以 下 哪 項 能 把 字 符 串 轉 化 成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 ("", $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.以下指令碼輸出什麼?
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.以下指令碼輸出什麼?
A.12345
B.12245
C.22345
D.11345
E.Array
答案解析:可以用訪問陣列元素的方式訪問字串中的字元,因此指令碼只是把字串中的第二個字元($s[1])替換成了字元 2,最終將輸出 12245。答案是 B。
12.方框中的正則表示式能與以下哪些選項匹配?(雙選) /.**123d/
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 能被訪問,指令碼將輸出什麼?
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.以下指令碼輸出什麼?
答案解析:指令碼將輸出 ablecostscindy。wordwrap 函式通常用來把字串切割成指定長度。然而在本題中,長度被設定為 1,因此函式將從空格處切割(第四個引數被設定為 false,因此函式不會從 單詞的中間進行切割)。填充字串是 c,等於把每個空格都換成了 c。
20.以下指令碼輸出什麼?
A.x
B.axle
C.axxle
D.applex
E.xapple
答案解析:指令碼將輸出 ablecostscindy。wordwrap 函式通常用來把字串切割成指定長度。然而在本題中,長度被設定為 1,因此函式將從空格處切割(第四個引數被設定為 false,因此函式不會從 單詞的中間進行切割)。填充字串是 c,等於把每個空格都換成了 c。