PHP常见字符串面试题总结
Posted 卡二条的技术圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP常见字符串面试题总结相关的知识,希望对你有一定的参考价值。
实现字符串的翻转
// 系统函数
strrev();
// 自定义函数
$str = "123qwer";
$len = strlen($str);
$newStr = '';
for($i=$len;$i>=0;$i--) {
$newStr .= mb_substr($str,$i,1,'utf-8');
}
echo $newStr;
echo $_SERVER['REMOTE_ADDR'];//客户端IP
echo $_SERVER['SERVER_ADDR'];//服务器端IP
echo $_SERVER['php_SELF'];//结果:"/index.php"
//当前脚本的名称(不包括路径和查询字符串)
echo $_SERVER["HTTP_REFERER"];//链接到当前页面的来源url
如何不通过第三个变量交换两个变量的值
$a = 10;
$b = 20;
$array = [$a, $b];
// list($var1, $var2....) = $array;
//将数组的值复制给一组变量,该数组只能为索引并且数组索引0开头
list($b,$a) = $array;
echo $b,$a;
$a = $a+$b;
//只适用于数据不适用于字符串的变量
$a = ($a+$b)-$b;
$b = ($a+$b)-$b;
//将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。
$a = $a^$b;
echo $a;
$b = $b^$a;
echo $b;
$a = $a^$b;
echo $a;
echo "<hr/>";
echo $a,$b;
数组和字符串如何实现相互转换
// 字符串转数组
// explode('分隔符', 字符串);将字符串按照分隔符组装为一个数组
$string = "我,爱,她,!";
var_dump(explode(',', $string));
// 数组转字符串
// implode('分隔符', 数组);将数组按照指定的分隔符拆分为一字符串
$array = ['name' => '张三','age' => 12];
echo implode(',', $array);
// str_split(字符串, 长度);
// 将字符串按照指定的长度分割为数组,字符串中空格也占位
$str = "hello, world !";
var_dump(str_split($str, 2));
字符串替换
// str_replace($findStr, $replaceStr, $str, $count);区分大小写
// str_ireplace($findStr, $replaceStr, $str, $count);不区分大小写
$string = 'hello,world!';
echo str_replace('O', '1', $string);
字符串截取
// mb_substr();可以处理中文编码问题
$string = "我爱你中国!";
echo mb_substr($string, 3, 2, 'UTF-8');
// strstr() 是根据特定字符开始截取指定长度
$strStr = 'hello,world';
strstr($strStr, 'o', true);
// substr() 是根据特定长度截取指定长度
$subStr ='hello,world';
echo substr($subStr, -2, 4);
如何将一个字符串转换为驼峰命名的方式
// ucfirst($str);将字符串的第一个字母转换为大写
// lcfirst($str);将字符串的第一个字母转换为小写
// ucwords($str, flag);将字符按照固定格式分割为一个单词,每个单词的首字母大写
$str2 = "high-school-student-informantion-management-system";
// 方式一
$arr = explode('-', $str2);
$len = count($arr);
$newStr = '';
for ($i=0; $i <$len; $i++) {
$newStr .= ucfirst($arr[$i]);
}
echo lcfirst($newStr);
// 方式二
$str3 = ucwords($str2, '-');
echo str_replace('-', '', lcfirst($str3));
统计字符串出现频率
$str = substr_count("hello, world!", 'o');
echo $str;
比较两个字符串是否相等
// strcmp($var1, $var2);比较两个变量的大小
// > 返回 <0,< 返回 > 0,= 返回 0
// strcmp($var1, $var2);函数不区分大小写
$var1 = "Hello";
$var2 = "Hello";
if (strcmp($var1, $var2) != 0) {
echo "两个字符串不相等";
} else {
echo strcmp($var1, $var2);
}
写一个函数,将一个字符串(如:1234567890),转换成(如1,234,567,890)每3位用逗号隔开的形式
$str = "12345678932132";
function strFormat($str)
{
$n = ""; //临时的变量
$m = strlen($str); //获取字符串长度
$k = $m % 3; //让整个长度和3取余之后余数是多少 = 0
for ($i=0; $i < $m; $i++) {
if ($i%3 == $k && $i!=0) {
$n .=",";
}
$n .= $str{$i};
}
return $n;
}
echo strFormat($str);
如何获取一个文件的扩展名
pathinfo()函数,返回文件路径名称、文件名称、扩展名称
// 方式一:利用系统函数操作
$fileInfo = __DIR__ ."/php_function.php";
// 扩展名
echo((pathinfo($fileInfo))['extension']);
// 路径名
echo((pathinfo($fileInfo))['dirname']);
// 文件名
echo((pathinfo($fileInfo))['basename']);
echo "<hr/>";
// 方式二:自定义函数操作
function extname($url)
{
if (strstr($url, "?")) {
//如果有问号格式的文件, 将问号前的文件取出给变量$file
list($file) = explode("?", $url);
} else {
$file = $url;
}
//以下是第二步取出文件名
$loc = strrpos($file, "/")+1;
$filename = substr($file, $loc);
//以下是第三步取扩展名称
$arr = explode(".", $filename);
//弹出数组最后一个元素
return array_pop($arr);
}
echo extname("http://***/aaa/init.inc.php")."<br>";
echo extname("init.inc.php")."<br>";
echo extname("C:/aaa/init.inc.php")."<br>";
echo extname("http://***/aaa/init.inc.php?a=100")."<br>";
echo "<hr/>获取文件路径名称";
$str = "http://***/aaa/init.inc.php?a=100";
echo mb_substr($str, 0, strripos($str, '/'));
echo "<hr/>获取文件名称";
$str = "http://***/aaa/init.inc.php?a=100";
echo (explode('?', mb_substr($str, strripos($str, '/'))))[0];
写一个函数,算出两个文件的相对路径
function abspath($a, $b)
{
//第一步去除公共的目录结构
// $a = "/a/b/c/d/e.php";
// $b = "/a/b/12/34/c.php";
$a = dirname($a); // /a/b/c/d
$b = dirname($b); // /a/b/12/34
$a = trim($a, "/"); // a/b/c/d
$b = trim($b, "/"); // a/b/12/34
$a = explode("/", $a); // array("a", "b", "c", "d")
$b = explode("/", $b); // array("a", "b", "12", "34")
//合并上面代码相当于 $a = explode("/", trim(dirname($a), "/"));
$num = max(count($a), count($b));
for ($i=0; $i<$num; $i++) {
if ($a[$i]==$b[$i]) {
unset($a[$i]);
unset($b[$i]);
} else {
break;
}
}
//$a = array("c", "d");
//$b = array("12", "34");
//第二步:回到同级目录, 进入另一个目录
$path = str_repeat("../", count($b)).implode("/", $a); // ../../c/d
return $path;
}
$a = "/a/b/c/d/e/w/f/e.php";
$b = "/a/b/12/34/100/c.php";
// ../../c/d
echo abspath($a, $b);
以上是关于PHP常见字符串面试题总结的主要内容,如果未能解决你的问题,请参考以下文章