一、氣泡排序
基本思想:
對需要排序的陣列從後往前(逆序)進行多遍的掃瞄,當發現相鄰的兩個數值的次序與排序要求的規則不一致時,就將這兩個數值進行交換。這樣比較小(大)的數值就將逐漸從後面向前面移動。
//氣泡排序
function mysort($arr)
for($i = 0; $i < count($arr); $i++)
$issort = false;
for ($j=0; $j< count($arr) - $i - 1; $j++)
if($arr[$j] < $arr[$j+1])
$issort = true;
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp ;
if($issort)
break;
return $arr;
$arr = array(3,1,2);
var_dump(mysort($arr));
二、快速排序
基本思想:
在陣列中挑出乙個元素(多為第乙個)作為標尺,掃瞄一遍陣列將比標尺小的元素排在標尺之前,將所有比標尺大的元素排在標尺之後,通過遞迴將各子串行分別劃分為更小的序列直到所有的序列順序一致。
//快速排序
//快速排序
function quick_sort($arr)
//先判斷是否需要繼續進行
$length = count($arr);
if($length <= 1)
return $arr;
$base_num = $arr[0];//選擇乙個標尺 選擇第乙個元素
//初始化兩個陣列
$left_array = array();//小於標尺的
$right_array = array();//大於標尺的
for($i=1; $i
{ //遍歷 除了標尺外的所有元素,按照大小關係放入兩個陣列內
if($base_num > $arr[$i])
//放入左邊陣列
$left_array = $arr[$i];
else
//放入右邊
$right_array = $arr[$i];
//再分別對 左邊 和 右邊的陣列進行相同的排序處理方式
//遞迴呼叫這個函式,並記錄結果
$left_array = quick_sort($left_array);
$right_array = quick_sort($right_array);
//合併左邊 標尺 右邊
return array_merge($left_array, array($base_num), $right_array);
$arr = array(3,1,2);
var_dump(quick_sort($arr));
三、二分查詢
基本思想:
假設資料是按公升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功;若x小於當前位置值,則在數列的前半段中查詢;若x大於當前位置值則在數列的後半段中繼續查詢,直到找到為止。(資料量大的時候使用)
//二分查詢
//二分查詢
function bin_search($arr,$low,$high,$k)
if($low <= $high)
$mid = intval(($low + $high)/2);
if($arr[$mid] == $k)
return $mid;
else if($k < $arr[$mid])
return bin_search($arr,$low,$mid-1,$k);
else
return bin_search($arr,$mid+1,$high,$k);
return -1;
$arr = array(1,2,3,4,5,6,7,8,9,10);
print(bin_search($arr,0,9,3));
四、順序查詢
基本思想:
從陣列的第乙個元素開始乙個乙個向下查詢,如果有和目標一致的元素,查詢成功;如果到最後乙個元素仍沒有目標元素,則查詢失敗。
//順序查詢
//順序查詢
function seq_search($arr,$n,$k)
$array[$n] = $k;
for($i = 0;$i < $n; $i++)
if($arr[$i] == $k)
break;
if($i < $n)
return $i;
else
return -1;
五、寫乙個函式,能夠遍歷乙個檔案下的所有檔案和子資料夾
function my_scandir($dir)
$files = array();
if($handle = opendir($dir))
while (($file = readdir($handle))!== false)
if($file != '..' && $file != '.')
if(is_dir($dir."/".$file))
$files[$file]=my_scandir($dir."/".$file);
else
$files = $file;
closedir($handle);
return $files;
var_dump(my_scandir('../'));
六、寫乙個函式,盡可能高效的從乙個標準url中取出檔案的副檔名
function getext($url)
$arr = parse_url($url);//parse_url解析乙個 url 並返回乙個關聯陣列,包含在 url **現的各種組成部分
$file = basename($arr['path']);// basename函式返回路徑中的檔名部分
$ext = explode('.', $file);
return $ext[count($ext)-1];
print(getext(''));
七、實現中文字串擷取無亂碼的方法
可使用mb_substr,但是需要確保在php.ini中載入了php_mbstring.dll,即確保「extension=php_mbstring.dll」這一行存在並且沒有被注釋掉,否則會出現未定義函 數的問題。
PHP面試總結
金三銀四招聘季,我也是按奈不住躁動的小心思呀。於是也出去試試水。背景介紹,本人差不多一年半的phper小菜鳥。可能懂得不多,了解的也不夠有深度,於是處於試 水階段,目前這家公司福利待遇在武漢還好吧,最起碼比起武漢大部分沒有五險一金的好的多,就是工資可能是我的短板,技術提公升困難,自然在公司價值就越來...
php面試高階
1 yield 核心原理是什麼 使用場景 php開發很多時候都要讀取大檔案,比如csv檔案 text檔案,或者一些日誌檔案。這些檔案如果很大,比如5個g。這時,直接一次性把所有的內容讀取到記憶體中計算不太現實 set time limit 0 a memory get usage function ...
PHP面試大綱
1.介紹一下過往你最熟悉的專案架構.2.介紹一下這個架構中你所參與的模組.3.流程圖和資料庫的設計 4.快取的使用.快取和sql資料一致性解決方案有哪些,怎麼盡量保證資料庫不被擊穿.5.在專案中遇到過什麼重大問題,怎麼查詢 怎麼解決的.6.剛才的專案用現在的經驗和能力,怎麼去優化或者是重構.1.li...