PHP的一些基礎編程題

前言

對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.='&nbsp;';
}
var_export($end);

輸出結果:
array (
  0 => '*****',
  1 => '&nbsp;****',
  2 => '&nbsp;&nbsp;***',
  3 => '&nbsp;&nbsp;&nbsp;**',
  4 => '&nbsp;&nbsp;&nbsp;&nbsp;*',
)

三、計算出 $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

分析總結

以上這些題目只是本人給出的一種答案,可能存在多種解題思路,若是有朋友想到其餘思路能夠在留言區留言,附上題號,解題思路和代碼,不限語言。索引

相關文章
相關標籤/搜索