PHP面试题
创建多级目录
//创建多级目录 $path = "./first/two/three"; if(is_dir($path)){ echo "已存在相同目录"; exit(); } if(mkdir($path,0777,true)){ echo '创建目录成功'; }
冒泡排序 一个数组
$arr = array(30, 2, 36, 14, 10, 25, 23, 85, 29, 105); //大 --》 小 /** *冒泡排序 * 思路:选择一个参考点,将参考点一次与后面的值进行比较,然后进行数据交换 * @param $arr */ function bouleSort($arr) { $len = count($arr); for ($i = 0; $i < $len; $i++) { echo $len - $i; for ($j = $i + 1; $j < $len; $j++) { if ($arr[$i] < $arr[$j]) { $tmp = $arr[$j]; $arr[$j] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; }
选择排序一个数组
$arr = array(30, 2, 36, 14, 10, 25, 23, 85, 29, 105); /** * 选择排序 * 以数组的第一值与数组后面的最小值进行排序 * @param $arr * @return mixed */ function selectSort($arr) { $len = count($arr); //该是素组是否可排序 if ($len > 1) { for ($i = 0; $i < $len - 1; $i++) { //循环找出最小的 for ($j = $i + 1; $j < $len - $i - 1; $j++) { if ($arr[$j + 1] < $arr[$j]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $tmp; } } //只有前面$i >$i+1 的值才进行替换 if ($arr[$i] > $arr[$i + 1]) { $tmp = $arr[$i + 1]; $arr[$i + 1] = $arr[$i]; $arr[$i] = $tmp; } } return $arr; } }
快速排序
/** * 快速排序 * 原理:选择一个排序的参考点(通常以数组的第一个值为参考点),大于参考值和小于参考点值分开,最后合并数组 * @param $arr * @return array */
$arr = array(30, 2, 36, 14, 10, 25, 23, 85, 29, 105);
function quickSort($arr) { $len = count($arr); $array_left = array(); $array_right = array(); //该是素组是否可排序 if ($len > 1) { for ($i = 1; $i < $len; $i++) { if ($arr[$i] > $arr[0]) { //放到右边数组 $array_right[] = $arr[$i]; } else { //放到左边数组 $array_left[] = $arr[$i]; } } $array_right = quickSort($array_right); $array_left = quickSort($array_left); /* var_dump($array_right); var_dump($array_left);*/ return array_merge($array_left, array($arr[0]), $array_right); } else { return $arr; } } var_dump(quickSort($arr));
写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数。
第一种:
$person = array( array('id' => 2, 'name' => 'zhangsan', 'age' => 23), array('id' => 5, 'name' => 'lisi', 'age' => 28), array('id' => 3, 'name' => 'pengdatou', 'age' => 17), array('id' => 3, 'name' => 'xiaohei', 'age' => 17), array('id' => 3, 'name' => 'laowan', 'age' => 17), ); //id /** * @param $arr * @param string $subject 排序的依据 * @return array */ function sortArray($arr, $subject = 'id') { //必须检查数据合法性 if (is_array($arr)) { $len = count($arr); for ($i = 0; $i < $len; $i++) { for ($j = $i + 1; $j < $len; $j++) { if ($arr[$i][$subject] < $arr[$j][$subject]) { $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; } } } } return $arr; } var_dump(sortArray($person, 'name'));
第二种:
/** * 思路: * 1、将要排序的值从二维数组中拉出来,组成一维数组 * 2、对一位数组进行排序 * 3、根据排序的一维数组进行遍历重新生成二维数组 * @param $arr * @param $keys * @param int $order * @return array|bool */ function array_sort($arr, $keys, $order = 0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach ($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if ($order == 0) { asort($keysvalue); } else { arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $key => $vals) { $keysort[$key] = $key; } $new_array = array(); foreach ($keysort as $key => $val) { $new_array[$key] = $arr[$val]; } return $new_array; } //测试 $person = array( array('id' => 2, 'name' => 'zhangsan', 'age' => 23), array('id' => 5, 'name' => 'lisi', 'age' => 28), array('id' => 3, 'name' => 'pengdatou', 'age' => 17), array('id' => 3, 'name' => 'xiaohei', 'age' => 17), array('id' => 3, 'name' => 'laowan', 'age' => 17), ); $result = array_sort($person, 'name', 1); var_dump($result);
折半查找
$arr = array(5, 9, 15, 25, 34, 47, 55); function seq_sch($arr, $obj, $low, $high) { if ($low <= $high) { //注意这里的括号 $middle = intval(($low + $high) / 2); // echo $middle; if ($obj > $arr[$middle]) { $low = $middle + 1; } elseif ($obj == $arr[$middle]) { return $middle; } elseif ($obj < $arr[$middle]) { //小于 $high = $middle - 1; } return seq_sch($arr, $obj, $low, $high); } return "不存在"; } $len = count($arr); echo seq_sch($arr, 55, 0, $len - 1);