对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
以上这些题目只是本人给出的一种答案,可能存在多种解题思路,若是有朋友想到其余思路能够在留言区留言,附上题号,解题思路和代码,不限语言。索引