PHP面試常見演算法、函式總結
阿新 • • 發佈:2018-12-31
<?php //a=10,b=15 在不用第三個變數的前提下交換a b的值 //使用list(): $a = "fsdfds"; $b = "xiaorui"; list($a,$b) = array($b,$a); echo $a."-".$b; //使用陣列分隔: $a = "fsdfds"; $b = "xiaorui"; $b = $a."#$".$b; $b = explode("#$",$b); $a = $b[1]; $b = $b[0]; echo $a."-".$b; //使用字串擷取 $a = "fsdfds"; $b = "xiaorui"; $a = $a.$b; $b = substr($a,0,strlen($a)-strlen($b)); $a = substr($a,strlen($b)); echo $a."-".$b; ?><?php //2.寫個函式來解決多執行緒同時讀寫一個檔案的問題 /* *flock(file,lock,block) *file 必需,規定要鎖定或釋放的已開啟的檔案 *lock 必需。規定要使用哪種鎖定型別。 *block 可選。若設定為 1 或 true,則當進行鎖定時阻擋其他程序。 *lock *LOCK_SH 要取得共享鎖定(讀取的程式) *LOCK_EX 要取得獨佔鎖定(寫入的程式) *LOCK_UN 要釋放鎖定(無論共享或獨佔) *LOCK_NB 如果不希望 flock() 在鎖定時堵塞 /* $fp = fopen("/tmp/lock.txt", "w+"); if (flock($fp, LOCK_EX)) { // 進行排它型鎖定 fwrite($fp, "Write something here\n"); flock($fp, LOCK_UN); // 釋放鎖定 } else { echo "Couldn't lock the file !"; } fclose($fp); ?>3. 寫5個不同的自己的函式,來擷取一個全路徑的檔案的副檔名,允許封裝php庫中已有的函式。 url dir/upload.image.jpg找出jpg或者.jpg 1.return strrchr($filename,".")); // strrchr() 函式查詢字串在另一個字串中最後一次出現的位置,並返回從該位置到字串結尾的所有字元 2.return substr($filename,strrpos($filname,".")); strrpos() 函式查詢字串在另一字串中最後一次出現的位置。 substr(string,start,length) 函式返回字串的一部分。 3.return array_pop(explode(".",$filename)); 4.$p=pathinfo($filename); return $p['extension']; 5. return strrev(substr(strrev($filanme),o,strpos(strrev($filename),"."))); <?php //4.從url http://www.baidu.com/xxx/xxx.php?id=1 中提取xxx.php $path = "http://www.baidu.com/xxx/xxx.php?id=1"; function getExt($path){ $arr=parse_url($path); $file=basename($arr['path']); $ext=explode(".", $file); return $ext[1]; } function getExt2($url){ $url=basename($url); $pos1=strpos($url,"."); $pos2=strpos($url, "?"); if(strstr($url,"?")){ return substr($url, $pos1+1,$pos2-$pos1-1); }else{ return substr($url, $pos1+1); } } ?><?php //將eBay轉換為yAbe輸出 $str="eBay"; $s1=strtolower(strrev($str)); $out=""; for($i=0;$i1.寫一個函式,隨機從a-z中取10000個值拼成字串 function suiji($num){ $arr=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"); $result=""; for($i=0;$i<$num;$i++){ $rand=rand(0,25); $result.=$arr[$rand]; } return $result; } 2.寫一個函式,計算當引數為N的值:1-2+3-4+5-5+7……+N function countN($num){ $t=0; for($i=1;$i<=$num;$i++){ if($i%2==0){ $t+=-$i; }else{ $t+=$i; } } return $t; } 3.一列數的規則如下:1,1,2,3,5,8,13,21,34 求第30位數是多少,用遞迴演算法實現。(斐波納契數列(Fibonacci Sequence),又稱黃金分割數列) function fibonacci($n){ $return=1; if($n<=0){ $return=0; }elseif($n<=2){ $return = 1; }elseif($n>2){ $return=fibonacci($n-1)+fibonacci($n-2); } return $return; } 4.將 1234567890 轉換成 1,234,567,890 每 3 位用逗號隔開的形式。(反轉、分隔、再反轉) $str="1234567890"; $str = strrev($str); $arr = str_split($str,3); //把字串按3個字元的長度拆成陣列. $str = strrev(implode($arr,',')); return $str;
1.下面程式碼的返回值是多少
$a=3;
$b=5;
echo $a."***".$b."<br/>";
if($a=5){
echo $a."***".$b."<br/>";
$a++;
$b++;
echo $a."***".$b."<br/>";
}
echo $a."***".$b;
<pre name="code" class="plain">答案:
3***5
5***5
6***6
6***6
2.
1.楊輝三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1