zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    oracle中 start with .. connect by prior.. 用法简介
    Java中com.jcraft.jsch.ChannelSftp讲解
    linux修改系统时间和linux查看时区、修改时区的方法
    map.containsKey
    Struts2中struts.multipart.maxSize配置
    oracle定时器job的使用
    java的System.getProperty()方法可以获取的值
    夜间模式的开启与关闭,父模板的制作
    开始Flask项目
    完成登录与注册页面的前端
  • 原文地址:https://www.cnblogs.com/webph/p/6637170.html
Copyright © 2011-2022 走看看