【总结】PHP常见面试题汇总(一)。。。
- /**
- *第1题:用PHP打印出上周的时间格式,如:"2015-01-2214:42:09"
- */
- echodate("Y-m-dH:i:s",strtotime("-1day"))."<br/>";
- /**
- *第2题:用PHP打印出上周的时间格式,如:"2015-01-1514:42:09"
- */
- echodate("Y-m-dH:i:s",strtotime("-1week"))."<br/>";
- /**
- *第3题:用PHP打印出上个月的时间格式,如:"2014-12-2214:42:09"
- */
- echodate("Y-m-dH:i:s",strtotime("-1month"))."<br/>";
- /**
- *第4题:简述一下echo、print、print_r区别
- *print_r()主要用来输出数组的结构;echo和print主要用来输出字符串,只不过echo可同时输出多个字符串,print只能输出一个字符串;
- *echo和print区别:
- (1)使用命令方式来输出字符串,此时不需要小括号;看个人习惯,个人习惯使用命令方式来输出字符串
- (2)使用函数方式来输出字符串,echo无返回值,print有返回值,成功返回1,失败返回0
- */
- print_r(array("helloworld"))."<br/>";
- echo(print"ddd")."<br/>";
- /**
- *第5题:如何实现字符串反转,如:"abcdefg"反转成"gfedcba";两种方式:(1)调用php自带的strrev()函数(2)自定义函数strrevv
- */
- echostrrev("abcdefg")."<br/>";
- $str="abcdefg";
- functionstrrevv($str){
- $len=strlen($str);
- $newstr=‘‘;
- for($i=$len-1;$i>=0;$i--){
- $newstr.=$str{$i};
- }
- return$newstr;
- }
- $showstr=strrevv($str);
- echo$showstr."<br>";
- //array_reverse():将原数组中的元素顺序反转,创建新的数组并返回;如果第二个参数指定为true,则元素的键名保持不变,如下:
- $a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
- print_r(array_reverse($a));
- //输出结果:
- Array([c]=>Horse[b]=>Cat[a]=>Dog)
- **
- *第6题:如何实现中文字符串截取无乱码的方法(mb_*系列函数),首先:需要开启extension=php_mbstring.dll扩展,结果:"你"
- */
- echomb_substr("你好",0,1,"gb2312")."<br/>";
- *第7题:用PHP写出显示客户端和服务器端IP的代码
- */
- echo$_SERVER[‘REMOTE_ADDR‘];//客户端IP
- echo$_SERVER[‘SERVER_ADDR‘];//服务器端IP
- echo$_SERVER[‘PHP_SELF‘];//结果:"/index.php"当前脚本的名称(不包括路径和查询字符串)
- echo$_SERVER["HTTP_REFERER"];//链接到当前页面的来源url
- echogethostbyname("www.v1pin.com");//获取指定域名的IP地址
- echogetenv("REMOTE_ADDR");//获取客户端IP地址
- echogetenv("SERVER_ADDR");//获取服务器端IP地址
- /**
- *第8题:mysql中IFNULL控制流函数;IFNULL()
- *IFNULL():
- *(1)它有两个参数,并且对第一个参数进行判断。
- *(2)如果第一个参数不是NULL,函数就会向调用者返回第一个参数;如果是NULL,将返回第二个参数;
- *例如:
- *SELECTIFNULL(1,2),IFNULL(NULL,10),IFNULL(4*NULL,‘false‘);//结果:"110false"
- */
- /**
- *第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=‘<imgsrc="../image/20121025/20121025105514_1093.jpg"/>‘;
- *//{"content":"<imgalt=\"\"src=\"..\/image\/20121025\/20121025105514_1093.jpg\"\/>"}
- *echojson_encode(array("content"=>$content));
- *(2)第二种情况,内容中只有单引号的情况:
- *$content="<imgalt=‘‘src=‘../image/20121025/20121025105514_1093.jpg‘/>";
- *//{"content":"<imgalt=‘‘src=‘..\/image\/20121025\/20121025105514_1093.jpg‘\/>"}
- *echojson_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实体,这些预定义字符主要包括:
- *&(和号)成为&
- *"(双引号)成为"
- *‘(单引号)成为'
- *<(小于)成为<
- *>(大于)成为>
- *echohtmlspecialchars($str,ENT_COMPAT);//默认,仅编码双引号
- *echohtmlspecialchars($str,ENT_QUOTES);//编码双引号和单引号
- *echohtmlspecialchars($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:
- *
- *functiontest(){
- *global$username;//声明全局变量时不能赋值
- *$username="小强";//此时可以给全局变量赋值
- *}
- *test();
- *echo"<pre>";print_r($GLOBALS);exit;//结果:"小强"
- *
- *案例2:
- *
- *$username="小强";
- *functiontest(){
- *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全局变量,在全站都可以使用
- */
[php]view plaincopy
- /**
- *第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...."));//传递给方法的参数统一放到数组中
- */
- functionuc_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‘
- //返回结果为自定义函数的返回结果
- returncall_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‘]
- )
- );
- }
[php]view plaincopy
- //第17题:如何使用array_multisort()函数实现对多维数组进行排序?
- //模拟从数据库中查询出来的记录(提示:二维数组)
- $arr[]=array("age"=>20,"name"=>"小强");
- $arr[]=array("age"=>21,"name"=>"李伟");
- $arr[]=array("age"=>20,"name"=>"小亮");
- $arr[]=array("age"=>22,"name"=>"黎明");
- foreach($arras$key=>$value){
- $age[$key]=$value[‘age‘];//排序字段"age"
- $name[$key]=$value[‘name‘];//排序字段"name"
- }
- /**
- *1、对$arr数组进行排序
- *首先按照年龄从大到小的顺序排列,如果年龄相同再按照名字的顺序排序,类似于sql中的orderby
- *2、注意事项:
- *(1)$age和$name等价于数据表的"age"和"name"列字段,类似于"orderbyagedesc,nameasc"
- *(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*fromuserorderbyagedesc,nameasc";
- *Array(
- *[0]=>Array
- *(
- *[age]=>22
- *[name]=>黎明
- *)
- *[1]=>Array
- *(
- *[age]=>21
- *[name]=>李伟
- *)
- *[2]=>Array
- *(
- *[age]=>20
- *[name]=>小亮
- *)
- *[3]=>Array
- *(
- *[age]=>20
- *[name]=>小强
- *)
- *)
- */
[php]view plaincopy
- //第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
- *)
- */
- //案例
知识推荐
- Caused by: org.apache.ibatis.reflection.ReflectionException我碰到的情况,原因不唯一
- .NET创建WebService服务简单的例子
- 关于MVC模式的登录注册
- JMeter之Http Cookie Manager
- 小程序——如何引入外部js
- 06: jQuery
- Apache 的 ab 压测工具快速使用
- tomcat 与 nginx,apache的区别
- js正则表达式
- Js slice()方法和splice()方法
- flume的sink写入hive表
- 【Linux】【Services】【kubernetes】安装与配置
- PHP 扫码识别信息
- nginx使用https功能
- php-get和post请求
- 用户体验分析:以 “师路南通网站” 为例
- flask_login 整合 pyjwt + json 简易flask框架
- 桌面消息通知:HTML5 Notification