前言昨晚實驗室一師弟在微薄上@我,給我發了幾道php的基礎面試題,這裡把我寫的答案貼出來題目(1)寫一個函數擷取URL的檔案尾碼,例如“http://www.feiyan.info/test.php?c=class&m=method”(獲得php或者.php)
<?php/** * 給定url,擷取檔案尾碼 * @param string $url * @return string */function getUrlPostfix ($url){ $url_arr = explode('.', $url); $postfix = $url_arr[count($url_arr) - 1]; $substr = substr($postfix, 0, 3); return $substr;}$url = "http://www.feiyan.info/test.php?c=class&m=method";$str = getUrlPostfix($url);echo $str . "\n";(2)寫一個函數,將一個字串每隔三個字元添加一個逗號,例如把字串1234567890轉換為1,234,567,890(金融中用到的記賬方法)
<?php/** * 每隔3個字元,用逗號進行分隔 * @param string $str * @return string */function splitStrWithComma ($str){ $arr = array(); $len = strlen($str); for ($i = $len - 1; $i >= 0;) { $new_str = ""; for ($j = $i; $j > $i - 3 && $j >= 0; $j --) { $new_str .= $str[$j]; } $arr[] = $new_str; $i = $j; } $string = implode(',', $arr); // 翻轉字串自己實現 // $string = strrev($string); for ($i = 0, $j = strlen($string) - 1; $i <= $j; $i ++, $j --) { $tmp = $string[$i]; $string[$i] = $string[$j]; $string[$j] = $tmp; } return $string;}$str = "1234567890";$new_str = splitStrWithComma($str);echo $new_str . "\n";
(3)寫一個php函數算出兩個檔案的相對路徑。例如$a="/a/b/c/d/e.php"; $b="/a/b/12/34/c.php",B相對於A的相對路徑是什嗎?這道題目可以看成是求第一個公用節點的題目,網上流傳的代碼大部分是錯的,考慮不周全,當然我這個也只是用“../”去表示,沒用"./"
<?php/** * 求$b相對於$a的相對路徑 * @param string $a * @param string $b * @return string */function getRelativePath ($a, $b){ $patha = explode('/', $a); $pathb = explode('/', $b); $counta = count($patha) - 1; $countb = count($pathb) - 1; $path = "../"; if ($countb > $counta) { while ($countb > $counta) { $path .= "../"; $countb --; } } // 尋找第一個公用結點 for ($i = $countb - 1; $i >= 0;) { if ($patha[$i] != $pathb[$i]) { $path .= "../"; $i --; } else { // 判斷是否為真正的第一個公用結點,防止出現子目錄重名情況 for ($j = $i - 1, $flag = 1; $j >= 0; $j --) { if ($patha[$j] == $pathb[$j]) { continue; } else { $flag = 0; break; } } if ($flag) break; else $i ++; } } for ($i += 1; $i <= $counta; $i ++) { $path .= $patha[$i] . "/"; } return $path;}$a = "/a/c/d/e.php";$b = "/a/c.php";$path = getRelativePath($a, $b);echo $path;
(4)計算兩個日期之間的天數
<?php/** * 求兩個日期之間相差的天數(針對1970年1月1日之後,求之前可以採用泰勒公式) * @param string $day1 * @param string $day2 * @return number */function diffBetweenTwoDays ($day1, $day2){ $second1 = strtotime($day1); $second2 = strtotime($day2); if ($second1 < $second2) { $tmp = $second2; $second2 = $second1; $second1 = $tmp; } return ($second1 - $second2) / 86400;}$day1 = "2013-07-27";$day2 = "2013-08-04";$diff = diffBetweenTwoDays($day1, $day2);echo $diff."\n";