對PHP的一些編程基礎題作了個整理,時常作這樣的題目能夠鞏固下本身的基礎,鍛鍊下邏輯思惟能力,面試筆試的時候有可能也用獲得。整理的這些題目中筆者就曾在筆試中遇到過,對於面試官爲什麼出這樣的題目,我以爲主要是想考察你的這幾個方面能力:
一、PHP基礎是否紮實;
二、是否能用文本編輯器編寫代碼;
三、命名是否規範,代碼邏輯和書寫風格是否可取;
四、面對問題,解決問題的能力;
...php
一、獲取img圖片路徑面試
$str="<img src='1.jpg'/><img src='2.jpg'/>"; $match="/<img.*?src=[\'\"](.*?)[\'\"].*?/"; preg_match_all($match,$str,$arr); print_r($arr[1]); 輸出結果:Array ( [0] => 1.jpg [1] => 2.jpg )
二、輸出評星倒三角形狀編程
$num=5;//最大評星數量 $begin=$end=array();$star='*';$brank=''; for($a=0;$a<$num;$a++){ $begin[$a]=$star; $star.='*'; } rsort($begin); for($b=0;$b<count($begin);$b++){ $end[$b]=$brank.$begin[$b]; $brank.=' '; } var_export($end); 輸出結果: array ( 0 => '*****', 1 => ' ****', 2 => ' ***', 3 => ' **', 4 => ' *', )
三、計算出 $b 相對於 $a 的相路徑數組
$a = '/a/b/c/d/a.php'; $b = '/a/b/12/34/c.php'; $a=explode('/',$a); $b=explode('/',$b); $path=''; // 將除掉a路徑的文件名 array_pop($a); //獲取$a,$b數組中重複的值 $ab=array_merge($a,$b); $c=array_filter(array_diff_assoc($ab,array_unique($ab))); //將b個數組的索引重置 $d=array_values(array_diff($b,$a)); //將a路徑中的目錄替換爲.. foreach($c as &$v) $v='..'; //合併兩個數組 $e=array_merge($c,$d); // 拼接路徑 foreach($e as &$v) $path.=$v.'/'; $path=rtrim($path,'/'); var_export($path); 輸出結果: '../../12/34/c.php'
四、2的1000次方計算邏輯編輯器
$total=2; for($i=2;$i<=1000;$i++){ $total=$total*2; } $total=number_format($total,0,'',''); print_r($total); 輸出結果: 1071508607186267320948425049060001810561404811...
五、寫出程序執行的結果函數
$x=5; echo ++$x;//6 echo '<br />'; echo $x++ + ++$x;//6+8=14 //後++ 不參與運算不加1,前++ 參與運算並加1; echo '<br />'; echo $x-- + --$x;//8+6=14 //後-- 不參與運算不減1,前-- 參與運算並減1; echo '<br />'; echo $x;//6 輸出結果: 6 14 14 6
六、獲取url中文件的擴展名,須要取出php或.phpurl
$url='http://www.ceshi.com/osfipin/osfipin.php?id=1'; $arr = explode('.',explode('?',$url)[0]); echo end($arr);//php //echo '<br />'; //echo key($arr);//獲取最後一個元素的鍵值 輸出'3' //echo '<br />'; //echo current($arr); //http://www //echo '<br />'; //echo next($arr); //ceshi //echo '<br />'; //echo prev($arr); //http://www 輸出結果: php
七、自定義千位分隔符函數code
function numberFormat($x) { //獲取分割的數的總長度 $len=strlen($x); $j=0; $val1=$val2=''; //從千位數開始循環 for($i=3;$i<=$len;$i++){ //能被3整除,就從這個位置反向截取3個字符 if($i%3==0){ //將字符截取,並在前面拼接上","號 $val1=','.substr($x,'-'.$i,3); //把新截取的字符拼接到原來截取字符的前面 $val2=$val1.$val2; //記錄最後一個能被3整除的位置 $j=$i; } } //用分割的數的總長度減去最後一個能被3整除的位置做爲長度,從0開始截取字符串,獲得餘下不夠千位分割符的數 //而後將其拼接到已經千位分割好的數$val2前面, //再把左邊多餘的","號去掉便可 $val3=substr($x,0,$len-$j); if($val3) $val2=$val3.$val2; $val2=ltrim($val2,','); return $val2; } $x=1234567890;//須要分割的數 $x=numberFormat($x);//調用自定義分割函數 print_r($x); 輸出結果: 1,234,567,890
八、自定義一個函數,可在屢次重複調用的狀況下使他輸出A B C的比例分別是5:3:1orm
function abc() { echo 'AAAAA'; echo 'BBB'; echo 'C'; } for($i=0;$i<2;$i++){ abc(); } 輸出結果: AAAAABBBCAAAAABBBC
以上這些題目只是本人給出的一種答案,可能存在多種解題思路,若是有朋友想到其餘思路能夠在留言區留言,附上題號,解題思路和代碼,不限語言。索引