PHP 面试题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 面试题相关的知识,希望对你有一定的参考价值。
请写出以下html标签的含义:
input
form
script
style
table
b
img
============================================================
<input/>标签 用于搜集用户信息。 根据不同的type属性值,输入字段拥有很多种形式。 输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等。
============================================================
<form>标签 用于为用户输入创建HTML表单。表单能够包含input元素, 比如文本字段、复选框、单选框、提交按钮等等。
============================================================
<script>标签 用于定义客户端脚本, 比如javascript。 script元素既可以包含脚本语句,也可以通过src属性指向外部脚本文件。
<style>标签 用于为HTML文档定义样式信息。
<table>标签 定义HTML表格。简单的HTML表格由table元素以及一个或多个tr、th或td元素组成。
<b> 呈现粗体文本效果。
<img/> 元素向网页中嵌入一幅图像。
14.用css、html编写一个两列布局的网页,右侧固定宽度200px,左侧自适应
html页面
<head> <link rel="stylesheet" type="text/css" href="theme.css" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> </head> <div id="wrap"> <div id="content" style="height:240px;"> <div id="contentb">content自适应区</div> </div> <div id="sidebar" style="height:240px;">sidebar固定宽度区</div> </div> <div id="footer">底部</div>
css页面
#wrap {*zoom:1;position: relative;} #sidebar {width: 200px;float:right;border:1px solid #CCC;} #content {margin-left:-210px;float:left;width:100%;} #contentb {margin-left:210px;border: 1px solid #CCC;height:240px;} #footer {border:1px solid #CCC;margin-top:10px;clear:both;}
JavaScript部分
1.JS表单弹出对话框函数是?获得输入焦点函数是?
弹出对话框函数: alert(), prompt(), confirm() 获得输入焦点函数: focus()
2.JS的转向函数是?怎么引入一个外部JS文件?
转向使用 window.location.href="" 引入外部js使用 <script src=""/>
3.解释下面语句的意思:document.form["formName"].submit
获取name为formName的表单并将该表单数据提交到服务器。但这行代码是不能运行的,有两处错误, 一是通过表单名称来获取表单得到时候,应该写成document.forms[‘formName’], 二是提交表单事件使用submit方法 例如:document.forms[‘login‘].submit()
4.有下面语句:<input id="txt" type="text" value="baidu"/>编写代码,
当鼠标划过文本框,自动选中文本框中的内容。
<script> function mOver(n) { obj =document.getElementById(n); //obj.focus(); obj.select(); } </script> <input onmouseover="mOver(this.id)" id="txt" type="text" value="baidu"/>
5.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。
主窗口
<head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> </head> <a href="" id="a1" target="new">新窗口</a> <div id="msg"></div> <script type="text/javascript"> var a1 = document.getElementById(‘a1‘); a1.onclick = function(){ window.open("result.php","new","location=no,toolbar=no"); return false; } </script>
弹出全屏窗口
opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用。
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> </head> <body> <h1>你好,世界!</h1> <input type="text" name = "message" id="m1"><br/> <input type="button" value="关闭" id="btn"/> <script type="text/javascript"> var btn = document.getElementById("btn"); var message = document.getElementById("m1"); btn.onclick=function(){ var div =window.opener.document.getElementById("msg"); div.innerHTML=message.value; window.close(); } </script> </body> </html>
8.用JavaScript写一个函数,其功能是可以删除数组中重复的元素。
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
slice() 方法可从已有的数组中返回选定的元素。
<script type="text/javascript"> function unique(arr){ var result= arr; for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length;j++){ temp =arr[i]; if((i+j+1)<arr.length && temp === arr[i+j+1] ){ result.splice(i+j+1,1); } } } return result; } var a = [2,4,3,8,5,33,8,4,false,‘‘,{}]; var b = unique(a); alert(b); </script>
12.如何添加html元素的事件,有几种方法,举例
(1).直接作为元素的属性,如<img onclick="alert(‘hello‘);"src="hello.jpg"> (2).使用DOM 0级事件,简单,兼容性好,如img.onclick=function(){} (3).使用DOM 2级事件,功能更强大,在非IE等标准浏览其中, 使用addEventListener,在IE浏览器中则使用attachEvent来实现。
13.JavaScript能否定义二维数组,如果不能你如何解决?
JavaScript不支持二维数组定义,可以用arr[0]=newarray()来解决。
14.假设a.html和b.html在同一个文件夹下面,用JavaScript实现当打开a.html
五秒钟后,自动跳转到b.html。
<script type="text/javascript"> function gotoB(){ window.location.href="http://www.baidu.com"; window.close(); } setTimeout("gotoB()",5000);//设置5秒跳转 </script>
15.请使用JavaScript写出三种产生一个image标签的方法(提示:从方法、对象、HTML角度考虑)
(1).var img=new Image(); (2).var img=document.createElement("image") (3).img.innerHTML="<img src=‘xxx.jpg‘/>"
16.js中网页前进和后退的代码
前进:history.forward();或者history.go(1); 后退:history.back();或者history.go(-1);
17.请写出一条至少3个节点的DOM树
<head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> </head> <body> <script type="text/javascript"> var div = document.createElement("div"); var a = document.createElement("a"); a.href="http://www.baidu.com"; var span=document.createElement("span"); span.innerHTML="百度"; a.appendChild(span); div.appendChild(a); document.body.appendChild(div); </script> </body>
18.实现点击按钮弹出窗口的代码
<head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> </head> <body> <input type="button" id="btn" value="点击这里" /> <script type="text/javascript"> document.getElementById("btn").onclick=function (){ window.open("http://www.baidu.com"); //document.write("ok"); }; </script> </body>
19.JavaScript包括那些基本数据类型?
JavaScript中包括5种基本数据类型,分别是Number,String,Boolean,Null和Undefined。
PHP语言基础
1.strlen()与mb_strlen()的作用分别是什么
strlen和mb_strlen都是用于获取字符串长度的,
其中strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数,
如果是多字节编码,如gbk和utf8,使用strlen得到的不是字符的个数,而是该字符的总字节数,
可以使用mb_strlen获取其字符个数,
使用mb_strlen要注意两点,
一是要开启mbstring扩展,
二是要指定字符集。
相关题目1:实现中文字串截取无乱码的方法。
<?php header(‘Content-Type:text/html;charset=utf-8‘); $str = ‘i love u‘; echo strlen($str);//8 $str1 = "津沙港湾"; echo strlen($str1);//12 echo mb_strlen($str1);//12 echo mb_strlen($str1,‘utf-8‘);//4 //直接使用内置php函数mb_substr() echo mb_substr($str1, 1,2,‘utf-8‘); //自定义函数截取中文字符 function substr_utf8($str,$start,$length=null){ return implode("", array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length)); } echo substr_utf8($str1, 1); ?>
如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
//方法一,使用php内置函数,确保配置中已打开mbstring扩展 <?php header(‘Content-Type:text/html;charset=utf-8‘); $str1 = "中国2北333京"; echo mb_strlen($str1,‘utf-8‘); echo mb_substr($str1, 3,1,‘utf-8‘); ?>
4.写出下列几个预定义全局变量的作用
$_SERVER[‘DOCUMENT_ROOT‘]//当前运行脚本所在的文档根目录 $_SERVER[‘HTTP_HOST‘]//当前请求的Host:头部的内容 $_SERVER[‘REMOTE_ADDR‘]//正在浏览当前页面用户的IP地址 $_SERVER[‘HTTP_REFERER‘]//链接到当前页面的前一页面的URL地址 $_SERVER[‘SERVER_NAME‘]//当前运行脚本所在服务器主机的名称 $_FILES//包含有所有上传的文件信息 S_FILES[‘userfile‘][‘name‘]//客户端机器文件的原名称 $_FILES[‘userfile‘][‘type‘]//文件MIME类型,如果浏览器提供此信息的话,如“image/gif”。 $_FILES[‘userfile‘][‘size‘]//已上传文件的大小,单位为字节 $_FILES[‘userfile‘][‘tmp_name‘]//文件被上传后在服务端储存的临时文件名 $_FILES[‘userfile‘][‘error‘]//和该文件上传相关的错误代码
5.include和require都能把另外一个文件包含到当前文件中,他们有什么区别?
include和include_once又有什么区别?
二者区别只有一个,那就是对包含文件的需求程度, include就是包含, 如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。 require意思是需要, 如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。 这两种结构除了在如何处理失败之外完全一样。 在如何处理失败时, include()产生一个警告 require()则导致一个致命错误 once的意思是一次,那么include_once和require_once表示只包含一次,避免重复包含。
6.用最少的代码写一个求3值最大值的函数
<?php header(‘Content-Type:text/html;charset=utf-8‘); function maxt($a,$b,$c){ //return $a>$b?($a>$c?$a:$c):($b>$c?$b:$c); return ($a>$b?$a:$b)>$c?($a>$b?$a:$b):$c; } echo maxt(3,-2,122); ?>
7.简述POST和GET传输的最大容量分别是多少?
POST根据你php.ini文件配置(默认是8M) GET的话大小限制在2KB
表单中get与post提交方法的区别?
get是发送请求HTTP协议通过url参数传递进行接收, post是实体数据,可以通过表单提交大量信息。
9.echo(),print(),print_r() printf()的区别?
echo 是一个语言结构,输出一个或多个字符串; print() 实际上不是一个函数(它是一个语言结构), 因此你可以不必使用圆括号来括起它的参数列表,它输出一个字符串; print_r() 是一个函数,打印变量的信息,基本类型,数组,对象。 printf — 输出格式化字符串 在实际使用中, print 和 echo 两者的功能几乎是完全一样。 可以这么说,凡是有一个可以使用的地方,另一个也可以使用。 但是,两者之间也还是一个非常重要的区别: 在 echo 函数中,可以同时输出多个字符串, 而在 print 函数中则只可以同时输出一个字符串。 同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。 echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。他们的区别在于: (1) echo可以输出多个字符串,像下面这样: echo ‘a‘,‘b‘,‘c‘; 如果你非要加上圆括号, 注意写成 echo (‘a‘,‘b‘,‘c‘);是错误的, 应该写成:echo (‘a‘),(‘b‘),(‘c‘); 它没有像函数的行为,所以不能用于函数的上下文 (2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用: $ret = print ‘Hello World‘; 所有它能用在更复杂的表达式中。 另外,echo的效率相对比较快~ 如下代码: <?php $a=‘hello ‘; $b=‘php world!‘; echo $a,$b.‘<br />‘; //echo 可以用逗号分隔字符串变量来显示print $a.$b.‘<br />‘; //而print不能使用逗号,只能用点号分隔,print $a,$b.‘<br />‘;//使用逗号时报错。 ?> echo 命令和 print 命令 相同,没有区别 echo 函数 和 print 函数 有区别。 echo() 无返回值,与echo 命令相同 print() 有返回值,成功,返1,false,返0. printf() 和 sprintf() 类似, 均为格式化输出,不同的是 前者输出到标准输出, 后者输出到变量
echo与print在使用逗号和点号区别
<?php header(‘Content-Type:text/html;charset=utf-8‘); $a = 9; $b = 10; echo $a.$b; echo $a,$b; print $a.$b; //print $a,$b;//这个逗号不行,会报错
10.用PHP打印出前一天的时间格式是2006-5-10 22:21:21
<?php header(‘Content-Type:text/html;charset=utf-8‘); echo date(‘Y-m-d H:i:s‘,time()-3600*24);//方法一 echo ‘<br/>‘; echo date(‘Y-m-d H:i:s‘,strtotime(‘-1 day‘));//方法二
求两个日期的差数,例如2009-3-1~2009-4-4的日期差数
<?php header(‘Content-Type:text/html;charset=utf-8‘); echo (strtotime("2009-4-4")-strtotime("2009-3-1"))/(3600*24);
11.不使用第三个变量交换两个变量的值
substr()方法
<?php header(‘Content-Type:text/html;charset=utf-8‘); //变量是字符串类型 $a = ‘abc‘; $b = ‘efg‘; $a .=$b; //substr()方法 $b = substr($a, 0,(strlen($a)-strlen($b))); $a = substr($a,Strlen($b)); echo $a; echo ‘<br/>‘; echo $b;
2.str_replace()方法
<?php header(‘Content-Type:text/html;charset=utf-8‘); //变量是字符串类型 $a = ‘abc‘; $b = ‘efg‘; $a .=$b; //str_replace()方法 $b = str_replace($b, "", $a); $a = str_replace($b, "", $a); echo $a; echo ‘<br/>‘; echo $b;
3.list()和array()方法
<?php header(‘Content-Type:text/html;charset=utf-8‘); //变量是字符串类型 $a = ‘abc‘; $b = ‘efg‘; //list()和array()方法 list($b,$a)=array($a,$b); echo $a; echo ‘<br/>‘; echo $b;
4.字符串和数字都适用 使用异或运算
<?php header(‘Content-Type:text/html;charset=utf-8‘); //变量是字符串和数字都适用 $a = ‘abc‘; $b = ‘efg‘; //异或方法 $a = $a ^ $b; $b = $a ^ $b; $a = $a ^ $b; echo $a; echo ‘<br/>‘; echo $b;
5.只适用于数字
<?php header(‘Content-Type:text/html;charset=utf-8‘); //变量是数字类型 $a = 5; $b = 6; $a = $a +$b; $b = $a - $b; $a = $a - $b; echo $a; echo ‘<br/>‘; echo $b;
6.利用explode()方法
<?php header(‘Content-Type:text/html;charset=utf-8‘); //变量是字符和数字类型 $a = ‘津沙港湾2016‘; $b = ‘崎沙火山岛0915‘; $a = base64_encode($a); $b = base64_encode($b); $a = $a.‘&‘.$b; $b = explode(‘&‘, $a); $a = base64_decode($b[1]); $b = base64_decode($b[0]); echo $a; echo ‘<br/>‘; echo $b;
12.请说明php中传值与传引用的区别。什么时候传值什么时候传引用?
变量默认总是传值赋值。 那也就是说, 当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。 这意味着, 例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。 PHP也提供了另外一种方式给变量赋值:引用赋值。 这意味着新的变量简单的引用(换言之,“成为其别名”或者“指向”)了原始变量。 改动新的变量将影响到原始变量,反之亦然。 使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)。 对象默认是传引用。 对于较大的数据,传引用比较好,这样可以节省内存的开销。
13.将1234567890转换成1,234,567,890每3位用逗号隔开的形式。
方法一用php内置函数
<?php header(‘Content-Type:text/html;charset=utf-8‘); $a = ‘1234567890‘; echo number_format($a);
方法二自定义函数
<?php header(‘Content-Type:text/html;charset=utf-8‘); //变量是字符和数字类型 $a = ‘1234567890‘; function nformat($str){ $n = ‘‘; //临时变量 $m = strlen($str); //获取字符串长度 $k = $m % 3; // echo $k."<br/>"; for($i=0;$i < $m; $i++){ // 如果10位数出现取余1,4,7 位置需要加逗号 if($i%3==$k &&$i!=0){ $n .= ","; } $n .= $str{$i}; } return $n; } echo nformat($a);
方法三chunk_split()方法 这个方法处理不了中文字符串
<?php header(‘Content-Type:text/html;charset=utf-8‘); //变量是字符和数字类型 $a = ‘1234567890ssvm‘; function nformat($str){ $str = strrev($str); $str = chunk_split($str,3,‘,‘); echo $str.‘<br/>‘; $str = strrev($str); $str = ltrim($str,‘,‘); return $str; } echo nformat($a);
方法四转成数组 使用中文字符串
<?php header("content-type:text/html;charset=utf-8"); /** 此函数的作用是适用中文字符串加千分号 */ function nformat($str){ //判断输入的是不是utf8类型的字符,否则退出 if(!is_string($str)||!mb_check_encoding($str,‘UTF-8‘)){ exit("输入类型不是UTF8类型的字符串"); } $array=array(); //将字符串存入数组 $l=mb_strlen($str,‘UTF-8‘); for($i=0;$i<$l;$i++){ $array[]=mb_substr($str,$i,1,‘UTF-8‘); } $n = ‘‘; //临时变量 $m = count($array); //获取数组长度 $k = $m % 3; for($i=0;$i < $m; $i++){ // 如果10位数出现取余1,4,7 位置需要加逗号 if($i%3==$k &&$i!=0){ $n[]= ","; $n[]=$array[$i]; continue; } $n[]=$array[$i]; } $string = implode($n); return $string; } $str = "1234adfadaf中华人民共和国"; echo nformat($str);
翻转中文字符串
<?php header("content-type:text/html;charset=utf-8"); /** 此函数的作用是反转中文字符串 mb_strlen() 获取字符的长度 mb_substr() 获取字符的单个元素 krsort() 按照键值逆序排序数组 implode() 将数组拼接为字符串 explode() 使用字符串分隔字符串 */ function str_rev_gb($str){ //判断输入的是不是utf8类型的字符,否则退出 if(!is_string($str)||!mb_check_encoding($str,‘UTF-8‘)){ exit("输入类型不是UTF8类型的字符串"); } $array=array(); //将字符串存入数组 $l=mb_strlen($str,‘UTF-8‘); for($i=0;$i<$l;$i++){ $array[]=mb_substr($str,$i,1,‘UTF-8‘); } //反转字符串 $a=krsort($array); //拼接字符串 $string=implode($array); return $string; } $str1 = "Englist"; $str2 = "English中国"; $str3 = "Eng中lish国"; $str4 = "中华人民共和国"; echo $str1."->".str_rev_gb($str1)."<br>"; echo $str2."->".str_rev_gb($str2)."<br>"; echo $str3."->".str_rev_gb($str3)."<br>"; echo $str4."->".str_rev_gb($str4)."<br>";
14.用PHP写出显示客户端IP与服务器IP的代码。
客户端IP:$_SERVER["REMOTE_ADDR"] 服务器端IP:$_SERVER["SERVER_ADDR"]
15.简述如何得到当前执行脚本路径,包括所得到参数。
获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"]或__FILE__ 获取参数,使用$_SERVER["QUERY_STRING"]
16.What is the difference between foo() & @foo()?
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。 @foo() 在执行这个函式时,会隐藏所有上述的错误讯息。 很多应用程序都使用@mysql_connect()和@mysql_query来隐藏mysql的错误信息, 这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
18.检测一个变量是否有设置的函数是否?是否为空的函数是?
isset 检测一个变量是否设置 empty 检测是否为空 注意二者的区别, 如果变量是非空或非零的值,则empty()返回FALSE。 换句话说, ""、0、"0"、NULL、FALSE、array()以及没有任何属性的对象都将被认为是空的。 null $var未定义 对于isset为false 对于empty为true
19.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量______中;而链接到当前页面的的前一页面URL记录在预定义变量______中。
当前脚本名称:$_SERVER["PHP_SELF"]或者$_SERVER["SCRIPT_NAME"]; 链接到当前页面的前一页面的URL地址:$_SERVER["HTTP_REFERER"]。
20.sort()、asort()、和ksort()有什么分别?它们分别在什么情况下使用?
1 sort($arr); //由小到大,忽略键名 2 rsort($arr); //由大到小,忽略键名 3 asort($arr); //由小到大,保留键名 4 arsort($arr); // 由大到小,保留键名 5 ksort($arr); //按照键名正序排序 6 krsort($arr); // 按照键名逆序排序 sort — 对数组排序 根据数组中元素的值,以英文字母顺序排序,索引键会由0到n-1重新编号。 主要是当数组索引键的值无关紧要时用来把数组排序。 rsort — 对数组逆向排序 rsort函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。 asort — 对数组进行排序并保持索引关系 asort函数对数组进行排序,数组的索引保持和单元的关联。 arsort — 对数组进行逆向排序并保持索引关系 arsort函数对数组进行排序,数组的索引保持和单元的关联。 ksort — 对数组按照键名排序 对数组按照键名排序,保留键名到数据的关联 krsort — 对数组按照键名逆向排序 对数组按照键名逆向排序,保留键名到数据的关联。
21.在PHP中error_reporting这个函数有什么作用?
打开或者关闭错误报告, 如: error_reporting(0);// 关闭所有PHP错误报告 error_reporting(E_ALL&~E_NOTICE); error_reporting(E_ALL);
error_reporting(2047)什么作用?
2047=1+2+4+8+16+32+64+128+256+512+1024 其中, 1对应E_ERROR, 2对应E_WARNING, 4对应E_PARSE, 8对应E_NOTICE, 16对应E_CORE_ERROR, 32对应E_CORE_WARNING, 64对应E_COMPILE_ERROR, 128对应E_COMPILE_WARNING, 256对应E_USER_ERROR, 512对应E_USER_WARNING, 1024对应E_USER_NOTICE。 error_reporting(2047)意味着上述错误都会显示出来。
23.常量如何定义?如何检测一个常量是否被定义?
定义常量:define(), const 检测常量是否定义:defined(), 如 define("TEST","happynewyear!"); if(defined("TEST")){ echoTEST; } const YHY = ‘yangyihai‘;
24.执行程序段<?php echo 8%(-2) ?>将输出
%为取模运算,输出0 $a%$b其结果的正负取决于$a的符号。 echo((-8)%3)."<br/>";//输出-2 echo(8%(-3))."<br/>";//输出2
25.数组函数arsort的作用是____;语句error_reporting(2047)的作用是____。
arsort:对数组进行逆向排序并保持索引关系 error_reporting(2047)的作用reportAllerrorsandwarnings,见21题中相关题目。
26.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHPHP
P模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
LoadModule php5_module "c:/php/php5apache2.dll"; AddType application/x-httpd-php.php
27.一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on.
allow_call_time_pass_reference:是否启用在函数调用时强制参数被按照引用传递,默认关闭
28.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须____
顶格写,并且不能包含任何其它字符除";" 如: $str = <<<SHOW my name is Jiang Qihui! SHOW; heredoc echo <<<EOT <html> <head><title>主页</title></head> <body>主页内容</body> </html> EOT; nowdoc $str = <<<‘EOD‘ Example of string spanning multiple lines using nowdoc syntax. EOD; nowdoc结构,其用法和heredoc相同, 不同的是Nowdoc 结构是类似于单引号字符串的。 nowdoc 中不进行解析操作。 这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。
29.echo count("abc");输出什么?
输出 1 count:计算数组中的单元数目或对象中的属性个数,通常是一个array, 任何其它类型都只有一个单元。 对于对象,如果安装了SPL,可以通过实现Countable接口来调用count()。 该接口只有一个方法count(),此方法返回count()函数的返回值。 如果var不是数组类型或者实现了Countable接口的对象,将返回1, 有一个例外,如果var是NULL则结果是0。
What will be the output of the following PHP code:
<?php echo count(strlen(" ?> answer:1
30.写个函数用来对二维数组排序
<?php header("content-type:text/html;charset=utf-8"); function array_sort($arr,$row,$type=‘asc‘){ $arr_temp = array(); //将排序依据列作为数组的键名 foreach($arr as $value){ $arr_temp[$value[$row]] = $value; } //按照键名对数组排序,保持索引关系 if($type == ‘asc‘){ ksort($arr_temp); }elseif($type == ‘desc‘){ krsort($arr_temp); } return $arr_temp; } $person = array( array(‘id‘=>2,‘name‘=>‘yang‘,‘age‘=>20), array(‘id‘=>43,‘name‘=>‘wang‘,‘age‘=>30), array(‘id‘=>22,‘name‘=>‘lang‘,‘age‘=>60) ); $person = array_sort($person, ‘name‘); var_dump($person);
输出结果
array (size=3) ‘lang‘ => array (size=3) ‘id‘ => int 22 ‘name‘ => string ‘lang‘ (length=4) ‘age‘ => int 60 ‘wang‘ => array (size=3) ‘id‘ => int 43 ‘name‘ => string ‘wang‘ (length=4) ‘age‘ => int 30 ‘yang‘ => array (size=3) ‘id‘ => int 2 ‘name‘ => string ‘yang‘ (length=4) ‘age‘ => int 20
31.写5个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装php库中已有的函数。
<?php header("content-type:text/html;charset=utf-8"); //echo __FILE__; $path = str_replace(‘\\‘, ‘/‘, __FILE__); function ext_one($path){ return substr(strrchr($path, ‘.‘),1); } echo ext_one($path); function ext_two($path){ return substr($path,strrpos($path, ‘.‘)+1); } echo ext_two($path); function ext_three($path){ $path_parts = pathinfo($path); return $path_parts[‘extension‘]; } echo ext_three($path); function ext_four($path){ $arr = explode(‘.‘,$path); return $arr[count($arr)-1]; } echo ext_four($path); function ext_five($path){ $pattern = ‘/^[^\.]+\.([\w]+)$/‘; return preg_replace($pattern, ‘${1}‘, basename($path)); } echo ext_five($path);
32.PHP的意思,它能干些什么?
PHP(HypertextPreprocessor,超文本预处理器的字母缩写) 是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到HTML中,尤其适合web开发。 PHP能做任何事。 PHP主要是用于服务端的脚本程序, 因此可以用PHP来完成任何其它的CGI程序能够完成的工作, 例如收集表单数据,生成动态网页,或者发送/接收Cookies。但PHP的功能远不局限于此。 PHP脚本主要用于以下三个领域: 1)服务端脚本。这是PHP最传统,也是最主要的目标领域。 2)命令行脚本。可以编写一段PHP脚本,并且不需要任何服务器或者浏览器来运行它。 通过这种方式,仅仅只需要PHP解析器来执行。 3)编写桌面应用程序。
Name a few ways to output (print) a block of HTML code in PHP?
你可以使用PHP中任何一种输出语句,包括echo、print、printf, 大部分人都使用如下例的echo: echo "My string $variable";你也可以使用这种方法: echo <<<END This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span>The END;remarks must be on a line of its own,and can‘t contain any extra white space. END;
35.$arr=array(‘james‘,‘tom‘,‘symfony‘);
请打印出第一个元素的值,并请将数组的值用‘,‘号分隔并合并成字串输出。
<?php header("content-type:text/html;charset=utf-8"); $arr=array(‘james‘,‘tom‘,‘symfony‘); echo $arr[0]; $str = implode(‘,‘, $arr); echo $str;
36.$a=‘abcdef‘;请取出$a的值并打印出第一个字母
<?php header("content-type:text/html;charset=utf-8"); $a=‘abcdef‘; echo $a; echo ‘<br/>‘; echo $a{0}; echo ‘<br/>‘; echo $a[0];
37.What does===do?What‘s an example of something that will give true for ‘==‘,but not‘===‘?
===表示全等,是指的两个变量的值和类型都相等。 如if(strpos(‘abc‘,‘a‘)==false)和if(strpos(‘abc‘,‘a‘)===false)
<?php header("content-type:text/html;charset=utf-8"); $text=‘Content-Type:text/xml‘; print substr($text,strpos($text,‘:‘)+1); print substr(strstr($text,‘:‘),1); print substr(strchr($text,‘:‘),1);
46.将字符09转换成十进制数字。
使用intval函数,echo intval("09"), 使用int强制类型转换。(float)‘09‘
47.请写一个函数,实现以下功能:字符串"open_door"转换成"OpenDoor"、"make_by_id"转换成"MakeById"。
<?php header("content-type:text/html;charset=utf-8"); function changeStr($str){ $str = explode(‘_‘,$str); $str = array_map(‘ucfirst‘, $str); return implode($str); } $str = ‘make_by_id‘; echo changeStr($str);
48.要求写一段程序,实现以下数组$arr1转换成数组$arr2:
$arr1
$arr1 = array( ‘0‘ => array(‘fid‘ =>1, ‘tid‘ => 1, ‘name‘ => ‘Name1‘), ‘1‘ => array(‘fid‘ =>1, ‘tid‘ => 2, ‘name‘ => ‘Name2‘), ‘2‘ => array(‘fid‘ =>1, ‘tid‘ => 5, ‘name‘ => ‘Name3‘), ‘3‘ => array(‘fid‘ =>1, ‘tid‘ => 7, ‘name‘ => ‘Name4‘), ‘4‘ => array(‘fid‘ =>3, ‘tid‘ => 9, ‘name‘ => ‘Name5‘) );
$arr2
$arr2 = array( ‘0‘ => array( ‘0‘ => array(‘tid‘ =>1,‘name‘=>‘Name1‘), ‘1‘ => array(‘tid‘ =>2,‘name‘=>‘Name2‘), ‘2‘ => array(‘tid‘ =>5,‘name‘=>‘Name3‘), ‘3‘ => array(‘tid‘ =>7,‘name‘=>‘Name4‘), ), ‘1‘ => array( ‘0‘ => array(‘tid‘ =>9,‘name‘=>‘Name5‘), ) );
实现函数
<?php header("content-type:text/html;charset=utf-8"); $arr1 = array( ‘0‘ => array(‘fid‘ =>1, ‘tid‘ => 1, ‘name‘ => ‘Name1‘), ‘1‘ => array(‘fid‘ =>1, ‘tid‘ => 2, ‘name‘ => ‘Name2‘), ‘2‘ => array(‘fid‘ =>1, ‘tid‘ => 5, ‘name‘ => ‘Name3‘), ‘3‘ => array(‘fid‘ =>1, ‘tid‘ => 7, ‘name‘ => ‘Name4‘), ‘4‘ => array(‘fid‘ =>3, ‘tid‘ => 9, ‘name‘ => ‘Name5‘) ); function changStr($arr){ foreach($arr as $val){ $tmp = $val; array_shift($val); $result[$tmp[‘fid‘]][]=$val; } return array_values($result); } $arr3 = changStr($arr1); var_dump($arr3);
输出界面
array (size=2) 0 => array (size=4) 0 => array (size=2) ‘tid‘ => int 1 ‘name‘ => string ‘Name1‘ (length=5) 1 => array (size=2) ‘tid‘ => int 2 ‘name‘ => string ‘Name2‘ (length=5) 2 => array (size=2) ‘tid‘ => int 5 ‘name‘ => string ‘Name3‘ (length=5) 3 => array (size=2) ‘tid‘ => int 7 ‘name‘ => string ‘Name4‘ (length=5) 1 => array (size=1) 0 => array (size=2) ‘tid‘ => int 9 ‘name‘ => string ‘Name5‘ (length=5)
50.$val=max(‘string‘,array(2,5,7),42);$val值为
array(2,5,7)
<?php echo max(1, 3, 5, 6, 7); // 7 echo max(array(2, 4, 5)); // 5 // When ‘hello‘ is cast as integer it will be 0. Both the parameters are equally // long, so the order they are given in determines the result echo max(0, ‘hello‘); // 0 echo max(‘hello‘, 0); // hello echo max(‘42‘, 3); // ‘42‘ // Here 0 > -1, so ‘hello‘ is the return value. echo max(-1, ‘hello‘); // hello // With multiple arrays of different lengths, max returns the longest $val = max(array(2, 2, 2), array(1, 1, 1, 1)); // array(1, 1, 1, 1) // 对多个数组,max 从左向右比较。 // 因此在本例中:2 == 2,但 4 < 5 $val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7) // 如果同时给出数组和非数组作为参数,则总是将数组视为 // 最大值返回 $val = max(‘string‘, array(2, 5, 7), 42); // array(2, 5, 7)
51.定义常量MYPI=3.14_________________________;
define("MYPI",3.14);
52.简述单引号和双引号的用法
双引号串中的内容可以被解释而且替换, 单引号串中的内容总被认为是普通字符。
53.Switch完整语法和注意事项
使用Switch语句可以避免冗长的if..elseif..else代码块, case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case后用‘‘, 注意break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
54.用PHP编写代码在页面输出当前的北京时间,格式为“2007-01-18 09:22:03”
date_default_timezone_set(‘PRC‘); echo date("Y-m-d H:i:s",time());
55.简述GBK、GB2312、BIG5、GB18030
GB2312 支持的汉字较少, GBK 是相比GB2312汉字更为丰富,包括全部中日韩汉字, GB18030 相比GBK增加了一些少数名族汉字汉字库更为多样,但是常人很难用到, 一般简体中文使用GBK而繁体中文使用BIG5。
56.计算某段字符串中某个字符出现的次数(例如:gdfgfdgd59gmkblg中g的次数)
$text=‘gdfgfdgd59gmkblg‘; echo substr_count($text,‘g‘);
57.以下语句可能存在错误,如果存在错误请指出什么错误(每个语句单独考虑)
print_r$val=333;//error,print_r是一个函数,需加上括号,如果是print则可以 print_r($val=333);//正确$a+=($b=4)+5;//notice,$a未定义,但可以正确运行 $foo[bar]=‘enemy‘;//notice,最好bar加上引号 functionx($a="1",$b){}//无,但给参数默认值应尽量从右向左
59.写出如下程序的输出结果
<?php header("content-type:text/html;charset=utf-8"); $a1 = null; $a2 = false; $a3 = 0; $a4 = ‘‘; $a5 = ‘0‘; $a6 = ‘null‘;//false 这个变量不为空 是一个字符串null $a7 = array(); $a8 = array(array());//false 数组不为空 二位数组 echo empty($a1) ? ‘true‘ : ‘false‘; echo empty($a2) ? ‘true‘ : ‘false‘; echo empty($a3) ? ‘true‘ : ‘false‘; echo empty($a4) ? ‘true‘ : ‘false‘; echo empty($a5) ? ‘true‘ : ‘false‘; echo empty($a6) ? ‘true‘ : ‘false‘; echo empty($a7) ? ‘true‘ : ‘false‘; echo empty($a8) ? ‘true‘ : ‘false‘;
结果为
true true true true true false true false
64.$arr=array(‘james‘,‘tom‘,‘symfony‘);
请将’jackjack’’添加到$arr数组的开头,并把jack打印出来。
array_unshift($arr,’jack’); echo $arr[0];
65.$arr=array(‘james‘,‘tom‘,‘symfony‘);请将$arr数组的值用’,’分割并合并成字符串输出?
$arr = explode(‘,‘,$arr); echo implode($arr);
67.$arr=array(3,7,2,1,‘d‘,‘abc‘);
请将$arr按照从大到小的顺序排序,并保持其键值不变?
<?php header("content-type:text/html;charset=utf-8"); $arr=array(3,7,2,1,‘d‘,‘abc‘); arsort($arr); var_dump($arr);
68.$mail=“[email protected]";
请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法?
echo strstr($mail,‘163‘); echo substr($mail,7); echo substr($mail,strpos($mail,‘@‘)+1); $arr=explode("@",$mail); echo $arr[1];
69.PHP中的注释的写法,要列出三种?
// 注释内容C风格的单行注释 # 注释内容unix风格的单行注释 /*注释内容*/ C风格的多行注释
70.如何在一个php函数中使用具有全局属性的变量,说出两种方式?
global $a $GLOBALS[‘a‘]
71.若$aa=‘aa‘;则print(‘aa is \‘aa\‘‘."<br/>")会输出什么?
aa is ‘aa‘
72.如何把$a=‘123’转化成123,列出两种方式?
$a = ‘123‘; $a = (int)$a; $a = intval($a); settype($a,‘int‘); 1)强制类型转换:(整型)字符串变量名; 2)intval(字符串变量); 3)直接转换:settype(字符串变量,整型);
73.说说break和continue可以用在哪些语句里,并且列出二者的区别?
break和continue可以用在switch语句中,或是循环结构中 它们的区别主要是体现在循环语句中, break表示跳出整个循环,不再执行,循环将终止, continue则表示跳出本次循环,继续下一次的循环,不会终止循环。
74.函数中的默认参数位置如何放置?
当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧; 否则,函数将不会按照预期的情况工作。
75.如何往一个数组后面添加一个值?列出两种方式?
$arr[]=$value; array_push($arr,$value);
76.说出数组涉及到的常用函数。
array--声明一个数组 count--计算数组中的单元数目或对象中的属性个数 foreach--遍历数组 list--遍历数组 explode--将字符串转成数组 implode--将数组转成一个新字符串 array_merge--合并一个或多个数组 is_array--检查是否是数组 print_r--输出数组 sort--数组排序 array_keys--返回数组中所有的键名 array_values--返回数组中所有的值 key--从关联数组中取得键名
77.字符串的常用函数?
trim()--去除字符串首尾处的空白字符(或者其他字符) strlen()--字符串长度 substr()--截取字符串 str_replace()--替换字符串函数 substr_replace()--对指定字符串中的部分字符串进行替换 strstr()--检索字符串函数 explode()--分割字符串函数 implode()--将数组合并成字符串 str_repeat()--重复一个字符串 addslashes();--转义字符串 htmlspecialchars()--THML实体转义
78
$a = ‘01‘; $result = 1; if(in_array($a, array(‘1‘))){ $result = 2; }elseif($a == ‘1‘){ $result = 3; }elseif($a == ‘01‘){ $result = 4; }else{ $result = 5; } echo $result;
结果为
2
80.php函数名是否区分大小写
不区分 函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。
82.翻转字符串中的单词,字符串仅包含大小写字母和空格,单词间使用空格分隔。
如:输入"This is PHP",输出"PHP is This"(非必要请不要使用PHP自带函数)
<?php header("content-type:text/html;charset=utf-8"); function reverse($str){ $arr = explode(‘ ‘, $str); $arr = array_reverse($arr); return implode(‘ ‘, $arr); } $str = ‘This is PHP‘; echo reverse($str);
83.请列举出你所知道的全局环境变量
$_ENV; $_SERVER; $_REQUEST; $_FILES; $_SESSION; $_COOKIE; $_GET; $_POST; $GLOBALS;
84.设有这样一个数组
$a=array(
array(id=>0),
array(id=>1),
array(id=>2),
......)
id=>0-10000,请问你如何使用PHP判断id=>500是否在这个数组内?
in_array()
85.
<?php header("content-type:text/html;charset=utf-8"); $a = $b =$c =0; $a =$b &&$c; var_dump($a); var_dump($b); var_dump($c);
结果
boolean false int 0 int 0
本文出自 “津沙港湾” 博客,请务必保留此出处http://11410485.blog.51cto.com/11400485/1853015
以上是关于PHP 面试题的主要内容,如果未能解决你的问题,请参考以下文章