php面试题 汇集1

柏雅-恒创科技

柏雅-恒创科技

发表于 2017-01-11 20:55:58
内容来源: 网络

一. 写出如下程序的输出结果

参考试题出处
1.基础

<?php
    $str1 = null;
    $str2 = false;
    echo $str1==$str2 ? '相等' : '不相等';
    $str3 = '';
    $str4 = 0;
    echo $str3==$str4 ? '相等' : '不相等';
    $str5 = 0;
    $str6 = '0';
    echo $str5===$str6 ? '相等' : '不相等';
?>

正确答案:相等 相等 不相等
注:== 表示值相等  ===表示值与类型都必须一样

原因是在PHP中变量是以C语言的结构体来存储的,空字符串和NULL,false都是以值为0存储的,其中这个结构体有个zend_uchartype;这样的成员变量,他是用来保存变量的类型的,而空字符串的类型是string,NULL的类型是NULL,false是boolean。

所以空字符串(''),false,NULL和0是值相等而类型不一样!

2.输出值

$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = '';
$a5 = '0';
$a6 = 'null';
$a7 = array();
$a8 = array(array());
echo '<br>';
echo empty($a1) ? 'true' : 'false';
echo '<br>';
echo empty($a2) ? 'true' : 'false';
echo '<br>';
echo empty($a3) ? 'true' : 'false';
echo '<br>';
echo empty($a4) ? 'true' : 'false';
echo '<br>';
echo empty($a5) ? 'true' : 'false';
echo '<br>';
echo empty($a6) ? 'true' : 'false';
echo '<br>';
echo empty($a7) ? 'true' : 'false';
echo '<br>';
echo empty($a8) ? 'true' : 'false';

正确答案:true
true
true
true
true
false
true
false
解释:$a1--$a5都是0  $a7是空数组

3.输出值

    $test = 'aaaaaa';
    $abc = & $test;
    unset($test);
    echo $abc;
    
    正确答案:aaaaaa
    解释:& $test; 只是建立了一个通道指向值存储的地方  unset只能撤销$test的通道,但是
    对$abc没影响

4.输出值

$count = 5;
function get_count(){
    static $count = 0;
    return $count++;
}
echo $count;
++$count;
echo get_count();
echo get_count();

正确答案:501
解释:不用解释,局部变量,静态变量 后加

5.输出值

 $GLOBALS['var1'] = 5;
    $var2 = 1;
    function get_value(){
        global $var2;
        $var1 = 0;
        return $var2++;
    }
    get_value();//这里没有输出值 但是var2却在这里加了值
    echo $var1;
    echo $var2;
    
    正确答案:52
    解释:如上
    

6.使用五种以上方式获取一个文件的扩展名

1.substr   strrchr
$filename = "phpddt.jpg";
echo substr(strrchr($filename,"."),1);
//strrchr() 函数(在php中)查找字符在指定字符串中从左面开始的最后一次出现的位置,如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。

2.explode array_pop//删除数组的最后一个元素
$filename = "phpddt.jpg";
$arr = explode(".",$filename);
echo array_pop($arr); //输出删除的最后一个元素

3.pathinfo 
$filename = "phpddt.jpg";
$info = pathinfo($filename);
echo $info['extension'];//输出扩展名

4.pathinfo
$filename = "phpddt.jpg";
echo pathinfo($filename,PATHINFO_EXTENSION);

5.substr //切割字符串  strrpos

$filename = "phpddt.jpg";
echo substr($filename,strrpos($filename,".")+1);
// strrpos() 函数查找字符串在另一字符串中最后一次出现的位置。

二、算法题

1.冒泡
function bubble_sort($array){
    $count = count($array);
    if ($count <= 0) return false;
    for($i=0; $i<$count; $i++){
        for($j=$i+1; $j<$count; $j++){
            if ($array[$i] > $array[$j]){
                $tmp = $array[$i];
                $array[$i] = $array[$j];
                $array[$j] = $tmp;
            }
        }
    }
    return $array;
}
2.快速  //思路:数组小于或等于一不用排序,取数组第一个和所有的值比较小于第一个的在归在左边数组$left_array 大于第一个的归于右边数组,两个数组递归主方法之后两边数据依次从小到大排列好,之后array_merge合并数组返回
function quick_sort($array) {
    if (count($array) <= 1) return $array;
    $key = $array[0];
    $left_arr = array();
    $right_arr = array();
    for ($i=1; $i<count($array); $i++){
        if ($array[$i] <= $key)
            $left_arr[] = $array[$i];
        else
            $right_arr[] = $array[$i];
    }
    $left_arr = quick_sort($left_arr);
    $right_arr = quick_sort($right_arr);
    return array_merge($left_arr, array($key), $right_arr);
}
//array_merge 合并数组

三.二分法查找数组元素

1.非递归  数组已排好序,知道数组的键值   查到就返回,没查到返回-1
function binary(&$arr,$low,$top,$target){
    while($low <= $top){
//由于php取商是有小数的,所以向下取整,不过也可不加,数组也会取整
        $mid = floor(($low+$top)/2);
        echo $mid."<br>";
        if($arr[$mid]==$target){
            return $arr[$mid];
        }elseif($arr[$mid]<$target){
            $low = $mid+1;
        }else{
            $top = $mid-1;
        }
    }
    return -1;
}
$arr = [1,4,7,12,34,45];
$rest = binary($arr,0,6,12);
print_r($rest);exit;
2.递归
function bin_sch($array, $low, $high, $k){
    if ($low <= $high){
        $mid = intval(($low+$high)/2);
        if ($array[$mid] == $k){
            return $mid;
        }elseif ($k < $array[$mid]){
            return bin_sch($array, $low, $mid-1, $k);
        }else{
            return bin_sch($array, $mid+1, $high, $k);
        }
    }
    return -1;
}

$arr = [1,4,7,12,34,45];
$rest = binary($arr,0,6,12);
print_r($rest);exit;

四.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序

$data = array();
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

function array_sort($arr, $keys, $order=1) {
    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);
    }
    $new_array = array();
    foreach($keysvalue as $key=>$value) {
        $new_array[$key] = $arr[$key];
    }

    return $new_array;
}

$rest = array_sort($data,'volume',0);
echo '<pre>';
print_r($rest);exit;

内容来源:https://segmentfault.com/a/1190000008072984

相关帖子
用户评论
开源开发学习小组列表