PHP常见字符串面试题总结

Posted 卡二条的技术圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP常见字符串面试题总结相关的知识,希望对你有一定的参考价值。

实现字符串的翻转

 
   
   
 
  1. // 系统函数

  2. strrev();

  3. // 自定义函数

  4. $str = "123qwer";

  5. $len = strlen($str);

  6. $newStr = '';

  7. for($i=$len;$i>=0;$i--) {

  8.        $newStr .= mb_substr($str,$i,1,'utf-8');

  9. }

  10. echo $newStr;

 
   
   
 
  1. echo $_SERVER['REMOTE_ADDR'];//客户端IP

  2. echo $_SERVER['SERVER_ADDR'];//服务器端IP

  3. echo $_SERVER['php_SELF'];//结果:"/index.php"

  4. //当前脚本的名称(不包括路径和查询字符串)

  5. echo $_SERVER["HTTP_REFERER"];//链接到当前页面的来源url

如何不通过第三个变量交换两个变量的值

 
   
   
 
  1. $a = 10;

  2. $b = 20;

  3. $array = [$a, $b];

  4. // list($var1, $var2....) = $array;

  5. //将数组的值复制给一组变量,该数组只能为索引并且数组索引0开头

  6. list($b,$a) = $array;

  7. echo $b,$a;

  8. $a = $a+$b;

  9. //只适用于数据不适用于字符串的变量

  10. $a = ($a+$b)-$b;

  11. $b = ($a+$b)-$b;

  12. //将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。

  13. $a = $a^$b;

  14. echo $a;

  15. $b = $b^$a;

  16. echo $b;

  17. $a = $a^$b;

  18. echo $a;

  19. echo "<hr/>";

  20. echo $a,$b;

数组和字符串如何实现相互转换

 
   
   
 
  1. // 字符串转数组

  2. // explode('分隔符', 字符串);将字符串按照分隔符组装为一个数组

  3. $string = "我,爱,她,!";

  4. var_dump(explode(',', $string));

  5. // 数组转字符串

  6. // implode('分隔符', 数组);将数组按照指定的分隔符拆分为一字符串

  7. $array = ['name' => '张三','age' => 12];

  8. echo implode(',', $array);

  9. // str_split(字符串, 长度);

  10. // 将字符串按照指定的长度分割为数组,字符串中空格也占位

  11. $str = "hello, world !";

  12. var_dump(str_split($str, 2));

字符串替换

 
   
   
 
  1. // str_replace($findStr, $replaceStr, $str, $count);区分大小写

  2. // str_ireplace($findStr, $replaceStr, $str, $count);不区分大小写

  3. $string = 'hello,world!';

  4. echo str_replace('O', '1', $string);

字符串截取

 
   
   
 
  1. // mb_substr();可以处理中文编码问题

  2. $string = "我爱你中国!";

  3. echo mb_substr($string, 3, 2, 'UTF-8');

  4. // strstr() 是根据特定字符开始截取指定长度

  5. $strStr = 'hello,world';

  6. strstr($strStr, 'o', true);

  7. // substr() 是根据特定长度截取指定长度

  8. $subStr ='hello,world';

  9. echo substr($subStr, -2, 4);

如何将一个字符串转换为驼峰命名的方式

 
   
   
 
  1. // ucfirst($str);将字符串的第一个字母转换为大写

  2. // lcfirst($str);将字符串的第一个字母转换为小写

  3. // ucwords($str, flag);将字符按照固定格式分割为一个单词,每个单词的首字母大写

  4. $str2 = "high-school-student-informantion-management-system";

  5. // 方式一

  6. $arr = explode('-', $str2);

  7. $len = count($arr);

  8. $newStr = '';

  9. for ($i=0; $i <$len; $i++) {

  10.    $newStr .= ucfirst($arr[$i]);

  11. }

  12. echo lcfirst($newStr);

  13. // 方式二

  14. $str3 = ucwords($str2, '-');

  15. echo str_replace('-', '', lcfirst($str3));

统计字符串出现频率

 
   
   
 
  1. $str = substr_count("hello, world!", 'o');

  2. echo $str;

比较两个字符串是否相等

 
   
   
 
  1. // strcmp($var1, $var2);比较两个变量的大小

  2. // > 返回 <0,< 返回 > 0,= 返回 0

  3. // strcmp($var1, $var2);函数不区分大小写

  4. $var1 = "Hello";

  5. $var2 = "Hello";

  6. if (strcmp($var1, $var2) != 0) {

  7.    echo "两个字符串不相等";

  8. } else {

  9.    echo strcmp($var1, $var2);

  10. }

写一个函数,将一个字符串(如:1234567890),转换成(如1,234,567,890)每3位用逗号隔开的形式

 
   
   
 
  1. $str = "12345678932132";

  2. function strFormat($str)

  3. {

  4.    $n = "";   //临时的变量

  5.    $m = strlen($str); //获取字符串长度

  6.    $k = $m %  3;  //让整个长度和3取余之后余数是多少 = 0

  7.    for ($i=0; $i < $m; $i++) {

  8.        if ($i%3 == $k && $i!=0) {

  9.            $n .=",";

  10.        }

  11.        $n .= $str{$i};

  12.    }

  13.    return $n;

  14. }

  15. echo strFormat($str);

如何获取一个文件的扩展名

 
   
   
 
  1. pathinfo()函数,返回文件路径名称、文件名称、扩展名称

  2. // 方式一:利用系统函数操作

  3. $fileInfo = __DIR__ ."/php_function.php";

  4. // 扩展名

  5. echo((pathinfo($fileInfo))['extension']);

  6. // 路径名

  7. echo((pathinfo($fileInfo))['dirname']);

  8. // 文件名

  9. echo((pathinfo($fileInfo))['basename']);

  10. echo "<hr/>";

  11. // 方式二:自定义函数操作

  12. function extname($url)

  13. {

  14.    if (strstr($url, "?")) {

  15.        //如果有问号格式的文件, 将问号前的文件取出给变量$file

  16.        list($file) = explode("?", $url);

  17.    } else {

  18.        $file = $url;

  19.    }

  20.    //以下是第二步取出文件名

  21.    $loc = strrpos($file, "/")+1;

  22.    $filename = substr($file, $loc);

  23.    //以下是第三步取扩展名称

  24.    $arr = explode(".", $filename);

  25.    //弹出数组最后一个元素

  26.    return array_pop($arr);

  27. }

  28. echo extname("http://***/aaa/init.inc.php")."<br>";

  29. echo extname("init.inc.php")."<br>";

  30. echo extname("C:/aaa/init.inc.php")."<br>";

  31. echo extname("http://***/aaa/init.inc.php?a=100")."<br>";

  32. echo "<hr/>获取文件路径名称";

  33. $str = "http://***/aaa/init.inc.php?a=100";

  34. echo mb_substr($str, 0, strripos($str, '/'));

  35. echo "<hr/>获取文件名称";

  36. $str = "http://***/aaa/init.inc.php?a=100";

  37. echo (explode('?', mb_substr($str, strripos($str, '/'))))[0];

写一个函数,算出两个文件的相对路径

 
   
   
 
  1. function abspath($a, $b)

  2. {

  3.    //第一步去除公共的目录结构

  4.    //  $a = "/a/b/c/d/e.php";

  5.    //  $b = "/a/b/12/34/c.php";

  6.    $a = dirname($a);    //  /a/b/c/d

  7.    $b = dirname($b);    //  /a/b/12/34

  8.    $a = trim($a, "/");   //   a/b/c/d

  9.    $b = trim($b, "/");   //   a/b/12/34

  10.    $a = explode("/", $a);  //  array("a", "b", "c", "d")

  11.    $b = explode("/", $b);  //  array("a", "b", "12", "34")

  12.    //合并上面代码相当于 $a = explode("/", trim(dirname($a), "/"));

  13.    $num = max(count($a), count($b));

  14.    for ($i=0; $i<$num; $i++) {

  15.        if ($a[$i]==$b[$i]) {

  16.            unset($a[$i]);

  17.            unset($b[$i]);

  18.        } else {

  19.            break;

  20.        }

  21.    }

  22.    //$a = array("c", "d");

  23.    //$b = array("12", "34");

  24.    //第二步:回到同级目录, 进入另一个目录

  25.    $path = str_repeat("../", count($b)).implode("/", $a);    //  ../../c/d

  26.    return $path;

  27. }

  28. $a = "/a/b/c/d/e/w/f/e.php";

  29. $b = "/a/b/12/34/100/c.php";

  30. // ../../c/d

  31. echo abspath($a, $b);


以上是关于PHP常见字符串面试题总结的主要内容,如果未能解决你的问题,请参考以下文章

PHP面试题超强总结(PHP中文网)

Java进阶之光!2021必看-Java高级面试题总结

VUE面试题总结

滴滴2019年php高级研发工程师面试题总结

360 php 面试总结

一道经典面试题:字符串在Java中如何通过“引用”传递