1. 程式人生 > >PHP面試常見演算法、函式總結

PHP面試常見演算法、函式總結

<?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