【ci框架】PHP常见面试题汇总。。。
- /**
- * 第1题:用PHP打印出前一天的时间格式,如:"2015-01-21 14:42:09"
- */
- echo date("Y-m-d H:i:s",strtotime("-1 day"))."<br/>";
- /**
- * 第2题:用PHP打印出上周的时间格式,如:"2015-01-15 14:42:09"
- */
- echo date("Y-m-d H:i:s",strtotime("-1 week"))."<br/>";
- /**
- * 第3题:用PHP打印出上个月的时间格式,如:"2014-12-22 14:42:09"
- */
- echo date("Y-m-d H:i:s",strtotime("-1 month"))."<br/>";
- /**
- * 第4题:简述一下echo、print、print_r 区别
- * print_r()主要用来输出数组的结构;echo 和 print 主要用来输出字符串,只不过echo 可同时输出多个字符串,print 只能输出一个字符串;
- * echo 和 print 区别:
- (1)使用命令方式来输出字符串,此时不需要小括号;看个人习惯,个人习惯使用命令方式来输出字符串
- (2)使用函数方式来输出字符串,echo无返回值,print有返回值,成功返回 1,失败返回 0
- */
- print_r(array("hello world"))."<br/>";
- echo (print "ddd")."<br/>";
- /**
- * 第5题:如何实现字符串反转,如:"abcdefg" 反转成 "gfedcba";两种方式:(1)调用php自带的strrev()函数 (2)自定义函数 strrevv
- */
- echo strrev("abcdefg")."<br/>";
- $str = "abcdefg";
- function strrevv($str){
- $len=strlen($str);
- $newstr = '';
- for($i=$len-1;$i>=0;$i--){
- $newstr .= $str{$i};
- }
- return $newstr;
- }
- $showstr = strrevv($str);
- echo $showstr."<br>";
- /**
- * 第6题:如何实现中文字符串截取无乱码的方法(mb_*系列函数),首先:需要开启 extension=php_mbstring.dll 扩展 ,结果:"你"
- */
- echo mb_substr("你好",0,1,"gb2312")."<br/>";
- /**
- * 第7题:用PHP写出显示客户端和服务器端IP的代码
- */
- $_SERVER['REMOTE_ADDR'];
- $_SERVER['SERVER_ADDR'];
- /**
- * 第8题:mysql中 IFNULL 控制流函数;IFNULL()
- * IFNULL():
- * (1)它有两个参数,并且对第一个参数进行判断。
- * (2)如果第一个参数不是NULL,函数就会向调用者返回第一个参数;如果是NULL,将返回第二个参数;
- * 例如:
- * SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(4*NULL,'false');//结果:"1 10 false"
- */
- /**
- * 第9题:简述include与require的区别?
- * 相同点:
- * (1)include与require都能把另外一个文件包含到当前文件中
- * 异同点:
- * (1)使用include时,当包含的文件不存在时系统会报出警告级别的错误,但并不影响程序的后续执行.
- * (2)使用require时,当包含的文件不存在时系统会先报出警告级别的错误,接着又报出一个致命性的错误,将终止程序的后续执行.
- * (3)require只会解释包含的文件一次,不会再解释第二次,因而效率相对较高;而include则会重复的解释包含的文件
- * (4)载入时机不同:require在运行前载入包含文件,include在运行时载入包含文件
- */
- /**
- * 第10题:如何获取一个字符串中指定的字符?
- */
- $str="abcdefg";
- echo $str{2}."<br/>";
- /**
- * 第11题:如何批量替换字符串中的特定字符?如:"批量替换$content内容字符串中的所有双引号为单引号"
- */
- $content = str_replace($searchs=array("\""), $replaces=array("'"), $content);
- /**
- * 第12题:如何将UEditor或FCkeditor编辑器中的内容转化为JSON串?
- *
- * (1)第一种情况,内容中只有双引号的情况:
- * $content='<img alt="" src="../image/20121025/20121025105514_1093.jpg" />';
- * // {"content":"<img alt=\"\" src=\"..\/image\/20121025\/20121025105514_1093.jpg\" \/>"}
- * echo json_encode(array("content"=>$content));
- * (2)第二种情况,内容中只有单引号的情况:
- * $content="<img alt='' src='../image/20121025/20121025105514_1093.jpg' />";
- * // {"content":"<img alt='' src='..\/image\/20121025\/20121025105514_1093.jpg' \/>"}
- * echo json_encode(array("content"=>$content));
- * (3)第三种情况,内容中既有双引号,又有单引号的情况:
- * $content=htmlspecialchars($content);//把一些预定义的字符转换为HTML实体
- * $json_arr = json_encode(array("content"=>$content));//将数组json化为字符串
- * $arr = json_decode($json_arr,true);//将json串反json化为数组
- * $arr['content']=htmlspecialchars_decode($arr['content']);//把一些预定义的HTML实体转换为字符显示到网页中
- *
- */
- /**
- * 第13题:addslashes()与 htmlspecialchars() 区别
- *
- * 区别:
- * (1)addslashes()函数主要在指定的预定义字符前添加反斜杠,这些预定义字符主要包括:
- *
- * 单引号 (')
- * 双引号 (")
- * 反斜杠 (\)
- * NULL
- *
- * addslashes()函数的主要作用是保证这些预定义字符能够正确入库,仅此而已
- *
- *
- * (2)htmlspecialchars()函数把一些预定义的字符转换为HTML实体,这些预定义字符主要包括:
- *
- *
- * & (和号) 成为 &
- * " (双引号) 成为 "
- * ' (单引号) 成为 '
- * < (小于) 成为 <
- * > (大于) 成为 >
- *
- * echo htmlspecialchars($str, ENT_COMPAT); //默认,仅编码双引号
- * echo htmlspecialchars($str, ENT_QUOTES); //编码双引号和单引号
- * echo htmlspecialchars($str, ENT_NOQUOTES);//不编码任何引号
- *
- */
- /**
- * 第14题:如何去除数组中重复的值?使用数组函数 array_unique() 可以做到
- * 案例结果:
- * Array(
- * [0] => 8535455928182811
- * [1] => 1558999140182811
- * [3] => 5795844841182811
- * )
- */
- $arr=array(
- "8535455928182811",
- "1558999140182811",
- "1558999140182811",
- "5795844841182811",
- "5795844841182811",
- );
- $ordersn_arr=array_unique($arr);
- echo "<pre>";print_r($ordersn_arr);exit;
- /*
- * 第15题:说一说自己对$GLOBALS全局变量和global关键字的理解?
- *
- * (1)、输出$GLOBALS全局变量:
- *
- * echo "<pre>";print_r($GLOBALS);
- *
- * 结果:
- * Array
- * (
- * [GLOBALS] => Array
- * *RECURSION*
- * [_POST] => Array
- * (
- * [username] => admin //等价于$_POST['username']
- * [password] => 123 //等价于$_POST['password']
- * )
- * [_GET] => Array
- * (
- * [username] => admin //等价于$_GET['username']
- * [password] => 123 //等价于$_GET['password']
- * )
- * [_COOKIE] => Array
- * (
- * [PHPSESSID] => movgbv4t1klb9fsbcd7ns8ik73
- * [username] => admin //等价于$_COOKIE['username']
- * [password] => 123 //等价于$_COOKIE['password']
- * )
- * [_FILES] => Array
- * (
- * [name] => 1.txt //等价于$_FILES['username']
- * [type] => image/jpeg //等价于$_FILES['password']
- * )
- * [_SESSION] => Array
- * (
- * [username] => admin //等价于$_SESSION['username']
- * [password] => 123 //等价于$_SESSION['password']
- * )
- * [pwd] => 134121233 //等价于$pwd
- * [username] => xiaoqiang //等价于$username
- * [password] => 123 //等价于$password
- * )
- *
- * (2)、几种等价的写法:
- *
- * (1)$_SESSION['username']等价于$GLOBALS['_SESSION']['username']
- * (2)$_COOKIE['username']等价于$GLOBALS['_COOKIE']['username']
- * (3)$_GET['username']等价于$GLOBALS['_GET']['username']
- * (4)$_POST['username']等价于$GLOBALS['_POST']['username']
- * (5)$_FILES['username']等价于$GLOBALS['_FILES']['username']
- * (6)$username等价于$GLOBALS['username']
- *
- * (3)、global关键字:
- *
- * php中全局变量在函数体内使用时必须声明为global;在函数体内通过global关键字声明的变量自动变为函数体外的全局变量
- *
- * 案例1:
- *
- * function test(){
- * global $username;//声明全局变量时不能赋值
- * $username="小强";//此时可以给全局变量赋值
- * }
- * test();
- * echo "<pre>";print_r($GLOBALS);exit;//结果:"小强"
- *
- * 案例2:
- *
- * $username="小强";
- * function test(){
- * global $username;//声明全局变量时不能赋值(提示:使用global关键字引用函数体外的$username变量)
- * $username="小红";//此时可以给全局变量赋值(提示:将函数体外$username变量重新赋值)
- * }
- * test();
- * echo "<pre>";print_r($GLOBALS);exit;//结果:"小红"
- *
- * (4)、全局变量的生效范围:
- *
- * $a = 1;include 'b.inc';//这里变量$a将会在包含文件b.inc中生效
- *
- * (5)、global声明的变量为全局变量,在函数和类的外部照样可以使用
- *
- * 如:discuz_application.php类中使用global关键字声明的$_G全局变量,在全站都可以使用
- */
- /**
- * 第16题:回调函数 call_user_func() 如何使用?
- * 格式一:
- * call_user_func("自定义函数","传递给自定义函数的参数1","传递给自定义函数的参数2","传递给自定义函数的参数3","传递给自定义函数的参数N....");//返回结果为自定义函数的返回结果
- * 格式二:
- * call_user_func(array("类名","方法名"),"传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N....");//返回结果为类中方法的返回结果
- * 格式三:
- * call_user_func_array("自定义函数",array("传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N...."));//传递给函数的参数统一放到数组中
- * 格式四:
- * call_user_func_array(array("类名","方法名"),array("传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N...."));//传递给方法的参数统一放到数组中
- */
- function uc_feed_add($icon, $uid, $username, $title_template='', $title_data='', $body_template='', $body_data='', $body_general='', $target_ids='', $images = array()) {
- //UC_API_FUNC值为:'uc_api_mysql'或'uc_api_post';
- //调用自定义函数'uc_api_mysql'或'uc_api_post'
- //返回结果为自定义函数的返回结果
- return call_user_func(UC_API_FUNC, 'feed', 'add',
- array( 'icon'=>$icon,
- 'appid'=>UC_APPID,
- 'uid'=>$uid,//用户ID
- 'username'=>$username,
- 'title_template'=>$title_template,
- 'title_data'=>$title_data,
- 'body_template'=>$body_template,
- 'body_data'=>$body_data,
- 'body_general'=>$body_general,
- 'target_ids'=>$target_ids,
- 'image_1'=>$images[0]['url'],
- 'image_1_link'=>$images[0]['link'],
- 'image_2'=>$images[1]['url'],
- 'image_2_link'=>$images[1]['link'],
- 'image_3'=>$images[2]['url'],
- 'image_3_link'=>$images[2]['link'],
- 'image_4'=>$images[3]['url'],
- 'image_4_link'=>$images[3]['link']
- )
- );
- }
- //第17题:如何使用 array_multisort() 函数实现对多维数组进行排序?
- //模拟从数据库中查询出来的记录(提示:二维数组)
- $arr[] = array("age"=>20,"name"=>"小强");
- $arr[] = array("age"=>21,"name"=>"李伟");
- $arr[] = array("age"=>20,"name"=>"小亮");
- $arr[] = array("age"=>22,"name"=>"黎明");
- foreach ($arr as $key=>$value){
- $age[$key] = $value['age']; //排序字段 "age"
- $name[$key] = $value['name'];//排序字段 "name"
- }
- /**
- * 1、对 $arr 数组进行排序
- * 首先按照年龄从大到小的顺序排列,如果年龄相同再按照名字的顺序排序,类似于sql中的order by
- * 2、注意事项:
- * (1)$age和$name 等价于 数据表的"age"和"name"列字段,类似于 "order by age desc,name asc"
- * (2)排序顺序标志:
- * SORT_ASC - 按照上升顺序排序
- * SORT_DESC - 按照下降顺序排序
- * (3)排序类型标志:
- * SORT_REGULAR - 将项目按照通常方法比较
- * SORT_NUMERIC - 将项目按照数值比较
- * SORT_STRING - 将项目按照字符串比较
- * (4)排序标志的默认值为: SORT_ASC 和 SORT_REGULAR
- * (5)每个一维数组后指定的排序标志仅仅对该一维数组有效,一个一维数组不能指定两个同类的排序标志
- * (6)该函数会改变数字索引,其它索引不改变
- *
- */
- array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$arr);
- echo "<pre>";print_r($arr);exit;
- /**
- * 结果: 等价于 "select * from user order by age desc,name asc";
- * Array(
- * [0] => Array
- * (
- * [age] => 22
- * [name] => 黎明
- * )
- * [1] => Array
- * (
- * [age] => 21
- * [name] => 李伟
- * )
- * [2] => Array
- * (
- * [age] => 20
- * [name] => 小亮
- * )
- * [3] => Array
- * (
- * [age] => 20
- * [name] => 小强
- * )
- * )
- */
- //第18题:移除数组中元素中的几种方式?
- //案例一:
- $arr1 = array('1','2','3','4');
- //提示:虽然删除了元素,但是没有重建数组索引
- unset($arr1[2]);
- echo "<pre>";print_r($arr1);
- /**
- * 使用unset()函数处理后的结果:
- * Array(
- * [0] => 1
- * [1] => 2
- * [3] => 4
- * )
- */
- //案例二:
- $arr2 = array('1','2','3','4');
- //提示:删除了元素,并且重建了数组索引
- array_splice($arr2, 2, 1);//参数2-开始位置 参数3-删除元素数量
- echo "<pre>";print_r($arr2);
- /**
- * 使用array_splice()函数处理后的结果:
- * Array(
- * [0] => 1
- * [1] => 2
- * [2] => 4
- * )
- */
- //案例三:
- $arr3 = array('1','2','3','4');
- //提示:删除了元素,被移除的元素由参数4来替代
- array_splice($arr3, 2, 1,array("5"));//参数1-原数组 参数2-开始位置 参数3-删除元素数量 参数4-替换被移除元素的数组
- echo "<pre>";print_r($arr3);
- /**
- * 使用array_splice()函数处理后的结果:
- * Array(
- * [0] => 1
- * [1] => 2
- * [2] => 5
- * [3] => 4
- * )
- */
- //案例四:
- $arr4 = array('1','2','3','4');
- //提示:从数组中截取一段元素并返回(返回的数组索引被重建)
- $arr5 = array_slice($arr4, 2, 1);//参数2-开始位置 参数3-删除元素数量
- echo "<pre>";print_r($arr5);
- /**
- * 使用array_slice()函数处理后的结果:
- * Array(
- * [0] => 3
- * )
- */