php面试题之三——PHP语言基础(基础部分)
三、PHP语言基础
1. strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部)
strlen和mb_strlen都是用于获取字符串长度。
strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码,如 gbk 和 utf-8,使用 strlen 得到是该字符的总字节数;
可以使用mb_strlen获取其字符个数,使用mb_strlen 要注意两点,一是要开启 mbstring 扩展,二是要指定字符集。
总结:
- strlen函数不管是字符串是单字节编码还是多字节编码,函数返回的结果都是字符串的总字节数。
- mb_strlen函数当字符串是单字节编码时,函数返回的结果是字符串的总字节数。当字符串是多字节编码时,函数返回的结果是字符串的个数。
mb_strlen函数在没有指定字符编码时,表示使用默认字符编码,即单字节编码,函数返回的是字符串的总字节数。 - PHP默认是单字节编码(内部字符编码),多字节编码方式有gbk、utf-8等。
示例:
-
-
/*
-
strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部)
-
*/
-
header('Content-Type:text/html;charset=utf-8');
-
// (1)英文字符串
-
$str1 ="duang~";
-
echo strlen($str1);//总字节数为6,内部字符编码,单字节编码
-
echo "<br />";
-
echo mb_strlen($str1);//总字节数为6,内部字符编码
-
echo "<br />";
-
echo mb_strlen($str1,'utf-8');//总字节数或字符长度为6,指定字符编码(utf-8),多字节编码
-
echo "<hr />";
-
-
// (2)中文字符串
-
$str2 = "你是我的小苹果";
-
echo strlen($str2);//总字节数为21,内部字符编码,单字节编码
-
echo "<br />";
-
echo mb_strlen($str2);//总字节数为21,内部字符编码
-
echo "<br />";
-
echo mb_strlen($str2,'utf-8');//字符长度为7,指定字符编码(utf-8),多字节编码
-
相关题目 1:实现中文字串截取无乱码的方法。
方法一,使用 php 内置函数 mb_substr()
方法二,自定义函数,以 utf-8 为例,如下:
-
-
/*
-
相关题目 1:实现中文字串截取无乱码的方法。
-
*/
-
header('Content-Type:text/html;charset=utf-8');
-
-
//=================方法一=======================
-
$str = "你是我的温暖阳光";
-
echo mb_substr($str, 2,4,'utf-8');//输出 我的温暖
-
-
// ================方法二=======================
-
/**
-
* utf8编码字符串截取无乱码
-
* @param $str string 要处理的字符串
-
* @param $start int 从哪个位置开始截取
-
* @param $length int 要截取字符的个数
-
* @return string 截取后得到的字符串
-
*/
-
function substr_utf8($str,$start,$length = null)
-
{
-
$sep = "";
-
$arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);
-
return join($sep,$arr);
-
}
-
// 示例
-
$str = "你是我的温暖阳光";
-
echo substr_utf8($str,2,4);//输出 我的温暖
-
相关题目2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
方法一,使用php内置函数,确保配置中已打开mbstring扩展
方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8
-
-
/*
-
相关题目 2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
-
*/
-
header('Content-Type:text/html;charset=utf-8');
-
-
//=================方法一=======================
-
$str = "中国2北333京";
-
echo mb_strlen($str,'utf-8');//输出字符数 8
-
echo mb_substr($str, 3,1,'utf-8');//输出 北
-
-
// ================方法二=======================
-
/**
-
* utf8编码字符串截取无乱码
-
* @param $str string 要处理的字符串
-
* @param $start int 从哪个位置开始截取
-
* @param $length int 要截取字符的个数
-
* @return string 截取后得到的字符串
-
*/
-
function substr_utf8($str,$start,$length = null)
-
{
-
$sep = "";
-
$arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);
-
return join($sep,$arr);
-
}
-
-
/**
-
* utf8编码字符串计算长度
-
* @param $str string 要处理的字符串
-
* @return int 字符串的长度或字符个数
-
*/
-
function strlen_utf8($str)
-
{
-
return count(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY));
-
}
-
-
// 示例
-
$str = "中国2北333京";
-
echo strlen_utf8($str);//输出字符数 8
-
echo substr_utf8($str,3,1);//输出 北
-
2. 下列哪个函数是用正则表达式将字符串分割到数组中 ( )
A. split
B. implode
C. explode
D. join
答案:A
3. 写出下列程序的输出结果(新浪网技术部)
-
-
/*
-
写出下列程序的输出结果(新浪网技术部)
-
*/
-
$x = 87;
-
$y = ($x % 7) * 16;
-
$z = $x > $y ? 1 : 0;
-
echo $z;
-
答案:1
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 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。
相关题目 1:What is the difference between include & include_once? include & require?(Yahoo)
相关题目 2:语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区
别是_;为了避免多次包含同一文件,可以用语句_来代替它们。
在如何处理失败时,include()产生一个警告而require()则导致一个致命错误;require_once()/include_once()
相关题目 3:What functions can you use to add library code to the currently running script?(Yahoo)
include、require
6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)
-
-
/*
-
6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)
-
*/
-
// 定义函数
-
function maxnum($a,$b,$c)
-
{
-
return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
-
}
-
-
// 调用实例
-
echo maxnum(24,15,8);
-
7. 简述 POST 和 GET 传输的最大容量分别是多少? (51.com 笔试题)
POST 根据你 php.ini 文件配置(默认是 8M)
GET 的话大小限制在 2KB
相关题目:表单中 get 与 post 提交方法的区别?
get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息。
8. 有三个 php 文件位于同一目录下,内容如下所示。使用浏览器访问 c.php,请问是否存在问题。如果存在问题,请指出修正方法并写出浏览器查看效果 ,如果不存在问题,请写出浏览器查看效果(酷讯 PHP 工程师笔试题)
A.php:
-
-
function fa(){
-
echo “in Function A\n”;
-
}
-
B.php:
-
-
include ‘a.php’;
-
function fb() {
-
fa();
-
echo “in Function B\n”;
-
}
-
C.php:
-
-
include ‘a.php’;
-
include ‘b.php’;
-
fa();
-
fb();
-
答案:存在问题,a.php 被包含了两次,导致 fa()函数重复定义,使用 include_once 避免重复包含。
9. echo(),print(),print_r()的区别?(新浪)
echo, print是PHP语句print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print只能打印出简单类型变量的值(如int,string)
print_r可以打印出复杂类型变量的值(如数组,对象)
echo -- 输出一个或者多个字符串
print --输出一个字符串
print_r -- 打印关于变量的易于理解的信息。
在实际使用中, 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的效率相对比较快~
如下代码:
-
-
$a=‘hello ‘;
-
$b=‘php world!’;
-
echo a,a,a,b.’<br />’;//echo 可以用逗号分隔字符串变量来显示
-
print a.a.a.b.’<br />’;//而print不能使用逗号,只能用点号分隔
-
print a,a,a,b.’<br />’;//使用逗号时报错。
-
说明:
,
是 echo 本身支持的一种语法,而.
则是字符串连接操作符,使用,
的效率要高一些。(少了连接运算)- echo可以使用
,
来分隔字符串变量,也可以使用,
来分隔字符串变量;print只能使用.
来分隔字符串变量。 - echo效率比print高
总结:
echo命令和print命令相同,没有区别
echo()和print()有区别:
echo()没有返回值,与echo命令相同
print()有返回值,总是返回1
补充:
printf()和sprintf()类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量
相关题目:What is the difference between "print()" and "echo( )"? (腾讯)
answer: print is a function,echo is a language construct
10. 用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。
-
-
/*
-
用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。
-
/
-
// 方法一==
-
echo date(“Y-m-d H:i:s”,time() - 360024);
-
echo “<br />”;
-
// 方法二==
-
echo date(“Y-m-d H:i:s”,strtotime("-1 day"));
-
echo “<br />”;
-
-
// 将表单中提交的时间字符串"2015-6-23"转成时间戳
-
$date = strtotime(“2015-6-23”);
-
echo $date;
-
说明:
- 使用strtotime可以将任何字符串的时间表示(now,seconds,day,week等)转换成时间戳,仅针对英文。
- 在实际开发的时候,strtotime非常有用,因为对于表单来说,提交的数据都是字符串。比如,“2013-4-27”需要将其转换成时间戳然后存到数据库中。
相关题目:求两个日期的差数,例如 2009-3-1 ~ 2009-4-4 的日期差数
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
11. 不使用第三个变量交换两个变量的值
-
-
/*
-
不使用第三个变量交换两个变量的值
-
*/
-
// 方法一==
-
$a = “PHP”;
-
b=<spanclass="hljs−string">"MySQL"</span>;</div></div></li><li><divclass="hljs−ln−numbers"><divclass="hljs−ln−linehljs−ln−n"data−line−number="8"></div></div><divclass="hljs−ln−code"><divclass="hljs−ln−line"><spanclass="hljs−keyword">e