php面试常问方法汇总

举报
lxw1844912514 发表于 2022/03/27 01:39:34 2022/03/27
【摘要】 global定义的全局常量和$GLOBALS的区别 $GLOBALS(超全局变量) — 引用全局作用域中可用的全部变量, 一个包含了全部变量的全局组合数组。变量的名字就是数组的键 <?phpfunction test() { $foo = "local variable";echo 'GLOBALS: ' . $...


global定义的全局常量和$GLOBALS的区别

$GLOBALS(超全局变量) — 引用全局作用域中可用的全部变量, 一个包含了全部变量的全局组合数组。变量的名字就是数组的键


   
  1. <?php
  2. function test() {
  3. $foo = "local variable";
  4. echo 'GLOBALS: ' . $GLOBALS["foo"] . "\n";
  5. echo '$foo in current scope: ' . $foo . "\n";
  6. }
  7. $foo = "Example content";
  8. test();
  9. ?>
  10. //结果
  11. GLOBALS:Example content
  12. $foo in current scope:local variable

global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件

使用关键字“global”你就可以把全局数据导入到一个函数的局部范围内


   
  1. <?php
  2. $a = 1;
  3. $b = 2;
  4. function Sum()
  5. {
  6. global $a, $b; //如果没有全局变量global在方法内是不能获得$a,$b值的
  7. $b = $a + $b;
  8. }
  9. Sum();
  10. echo $b;
  11. ?>
  12. //结果
  13. 3

在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用


   
  1. <?php
  2. global $a;
  3. $a=123; //必须分开赋值
  4. function f() {
  5. echo $a; //错误
  6. }
  7. //再看看下面一例
  8. function f() {
  9. global $a;
  10. $a=123;
  11. }
  12. f();
  13. echo $a; //正确,可以使用

const 定义的常量和define()定义的常量的区别

1.const用于类成员变量的定义,一经定义,不可修改。define不可以用于类成员变量的定义,可用于全局常量。

2.const可在类中使用,define不能(一般是define在类外定义常量,const在类内定义常量)

3.const不能再条件语句中定义常量


   
  1. <?php
  2. if (...){const FOO = 'BAR'; // 无效的invalid
  3. }if (...) {
  4. define('FOO', 'BAR'); // 有效的valid
  5. }
  6. ?>

4.const采用普通的常量名称,define可以采用表达式作为名称


   
  1. <?php
  2. const FOO = 'BAR';
  3. for ($i = 0; $i < 32; ++$i) {
  4. define('BIT_' . $i, 1 << $i);
  5. }
  6. ?>

5.const只能接受静态的标量,而define可以采用任何表达式


   
  1. <?php
  2. const BIT_5 = 1 << 5; // 无效的invalid
  3. define('BIT_5', 1 << 5); // 有效的valid
  4. ?>

6.const定义的常量时大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感


   
  1. <?php
  2. define('FOO', 'BAR', true);
  3. echo FOO; // BAR
  4. echo foo; // BAR
  5. ?>

7.const是语言结构,define是函数,const更快

PHP排序函数

  • sort() 函数用于对数组单元从低到高进行排序。

  • rsort() 函数用于对数组单元从高到低进行排序。

  • asort() 函数用于对数组单元从低到高进行排序并保持索引关系。

  • arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。

  • ksort() 函数用于对数组单元按照键名从低到高进行排序。

  • krsort() 函数用于对数组单元按照键名从高到低进行排序。

参考文章

array_multisort:对列表型二维数组排序


   
  1. $data = array();
  2. $data[] = array('volume' => 67, 'edition' => 2);
  3. $data[] = array('volume' => 86, 'edition' => 1);
  4. $data[] = array('volume' => 85, 'edition' => 6);
  5. $data[] = array('volume' => 98, 'edition' => 2);
  6. $data[] = array('volume' => 86, 'edition' => 6);
  7. $data[] = array('volume' => 67, 'edition' => 7);
  8. $volume = array_column($data,'volume');
  9. $edition = array_column($data,'edition');
  10. //按照volume升序排
  11. array_multisort($volume,SORT_ASC,$data);
  12. //按照volume升序排,volume一样就按照edition降序排
  13. //array_multisort($volume,SORT_ASC,$edition,SORT_DESC,$data);
  14. print_r($data);

str_repeat

str_repeat() 函数把字符串重复指定的次数。


   
  1. echo str_repeat("Shanghai",2);
  2. //结果:ShanghaiShanghai

strstr

搜索字符串在另一字符串中的第一次出现

查找 "Shanghai" 在 "I loveShanghai! and Shanghai" 中的第一次出现,并返回字符串的剩余部分【包含第二个参数本身】

echo strstr("I loveShanghai! and Shanghai","Shanghai");//Shanghai! and Shanghai

  

第三个参数默认false,如果设置为 "true",它将返回 第二个参数第一次出现之前的字符串部分【不包含第二个参数本身】

echo strstr("I loveShanghai! and Shanghai","Shanghai",true);//I love

  

该函数对大小写敏感。如需进行不区分大小写的搜索,请使用 stristr() 函数


array_filter

用回调函数过滤数组中的单元(文档)

大部分可以用来过滤数组空的元素


   
  1. $data = [1,0,3,false,'',null,"tom",'0'];
  2. print_r(array_filter($data));
  3. //结果
  4. Array
  5. (
  6. [0] => 1
  7. [2] => 3
  8. [6] => tom
  9. )

有回调函数的时候(该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中,如果是false就不返回。数组键名保持不变,原数组不变):


   
  1. $arr = ['a','b',1,2,3];
  2. $new_arr = array_filter($arr,function($val){
  3. return is_numeric($val); //过滤不是数字的值,is_numeric返回bool值
  4. });
  5. print_r($new_arr);
  6. //结果:
  7. Array
  8. (
  9. [2] => 1
  10. [3] => 2
  11. [4] => 3
  12. )

array_pop

弹出数组最后一个单元(出栈),原来的数据中将不不再有最后一个值了。


   
  1. $data = [1, 2, 3, 4];
  2. print_r(array_pop($data));
  3. //结果:
  4. 4

   
  1. $data = [
  2. [
  3. 'name' => 'xxx',
  4. 'age' => 12
  5. ],
  6. [
  7. 'name' => 'yyy',
  8. 'age' => 20
  9. ],
  10. [
  11. 'name' => 'zzz',
  12. 'age' => 30
  13. ]
  14. ];
  15. print_r(array_pop($data));
  16. //结果:
  17. Array
  18. (
  19. [name] => zzz
  20. [age] => 30
  21. )

array_shift

第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。


   
  1. $data = [1, 2, 3, 4];
  2. print_r(array_shift($data));
  3. print_r($data);
  4. //结果:
  5. 1
  6. Array
  7. (
  8. [0] => 2
  9. [1] => 3
  10. [2] => 4
  11. )

   
  1. $data = [
  2. [
  3. 'name' => 'xxx',
  4. 'age' => 12
  5. ],
  6. [
  7. 'name' => 'yyy',
  8. 'age' => 20
  9. ],
  10. [
  11. 'name' => 'zzz',
  12. 'age' => 30
  13. ]
  14. ];
  15. print_r(array_shift($data));
  16. print_r($data);
  17. //结果:
  18. Array
  19. (
  20. [name] => xxx
  21. [age] => 12
  22. )
  23. Array
  24. (
  25. [0] => Array
  26. (
  27. [name] => yyy
  28. [age] => 20
  29. )
  30. [1] => Array
  31. (
  32. [name] => zzz
  33. [age] => 30
  34. )
  35. )

array_slice

截取数组


   
  1. $data = [1, 2, 3, 4];
  2. print_r(array_slice($data,1,2));
  3. print_r(array_slice($data,-1,1));
  4. //结果:
  5. Array
  6. (
  7. [0] => 2
  8. [1] => 3
  9. )
  10. Array
  11. (
  12. [0] => 4
  13. )

   
  1. $data = [
  2. [
  3. 'name' => 'xxx',
  4. 'age' => 12
  5. ],
  6. [
  7. 'name' => 'yyy',
  8. 'age' => 20
  9. ],
  10. [
  11. 'name' => 'zzz',
  12. 'age' => 30
  13. ]
  14. ];
  15. print_r(array_slice($data,1,2));
  16. print_r(array_slice($data,-1,1));
  17. //结果:
  18. Array
  19. (
  20. [0] => Array
  21. (
  22. [name] => yyy
  23. [age] => 20
  24. )
  25. [1] => Array
  26. (
  27. [name] => zzz
  28. [age] => 30
  29. )
  30. )
  31. Array
  32. (
  33. [0] => Array
  34. (
  35. [name] => zzz
  36. [age] => 30
  37. )
  38. )

array_map

为数组的每个元素执行回调函数,返回一个新的数组


   
  1. <?php
  2. $arr = [1,3,5];
  3. $res = array_map(function($val){
  4. return $val*10; //每个值乘10
  5. },$arr);
  6. print_r($res);
  7. print_r($arr);
  8. //结果:
  9. Array
  10. (
  11. [0] => 10
  12. [1] => 30
  13. [2] => 50
  14. )
  15. Array
  16. (
  17. [0] => 1
  18. [1] => 3
  19. [2] => 5
  20. )

多个数组的时候:


   
  1. $arr1 = [1,2,3,4,5];
  2. $arr2 = [6,7,8,9,10];
  3. $res = array_map(function($val1,$val2){
  4. return $val1 + $val2;
  5. },$arr1,$arr2);
  6. print_r($res);
  7. //结果:
  8. Array
  9. (
  10. [0] => 7
  11. [1] => 9
  12. [2] => 11
  13. [3] => 13
  14. [4] => 15
  15. )

array_walk

使用用户自定义函数对数组中的每个元素做回调处理,成功时返回 TRUE, 或者在失败时返回 FALSE


   
  1. <?php
  2. //将数组中的元素用于某种操作
  3. $arr = ['a','b','c'];
  4. array_walk($arr,function(&$val,$key){
  5. $val .= $val;
  6. });
  7. print_r($arr);
  8. //结果:
  9. Array
  10. (
  11. [0] => aa
  12. [1] => bb
  13. [2] => cc
  14. )

异同点

  • array_filter() 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,返回过滤后的数组  

  • array_map() 重点在于遍历一个数组或多个数组的元素,返回一个新的数组  

  • array_walk() 重点在于遍历数组进行某种操作  

  • array_filter() 和 array_walk()对一个数组进行操作,数组参数在前,函数参数在后  array_map() 可以处理多个数组,因此函数参数在前,数组参数在后,可以根据实际情况放入多个数组参数

ceil()

ceil函数是向上取整函数,里面参数是float,返回值也是float


   
  1. echo ceil(4.1); // 5
  2. echo ceil(9.999); // 10
  3. echo ceil(5); //5
  4. echo ceil(-1.2); // -1
  5. echo ceil(-1); // -1

floor()

floor函数是向下取整,里面参数是float,返回值也是float


   
  1. echo floor(4.1); // 4
  2. echo floor(9.999); // 9
  3. echo floor(5); //5
  4. echo floor(-1.2); // -2
  5. echo floor(-1); // -1

round()

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
返回将 val 根据指定精度 precision(十进制小数点后数字的数目)进行四舍五入的结果。precision 也可以是负数或零(默认值)。返回值是float型


   
  1. echo round(3.4); // 3
  2. echo round(3.5); // 4
  3. echo round(3.6); // 4
  4. echo round(3.6, 0); // 4
  5. echo round(1.95583, 2); // 1.96
  6. echo round(1241757, -3); // 1242000
  7. echo round(5.045, 2); // 5.05
  8. echo round(5.055, 2); // 5.06

round 的参数一是数据源,参数二是要保留的小数位而且之后一位(比如你输入2那么第3为是之后一位)被四舍五入,当他是负数的时候,从数据源最后一位开始往前数相应的长度制0并将最后一位四舍五入比如round(123456,-2) 就是123456从6开始往前数两位都变成零,并且最后一位5(从后往前数第一位是6最后一位是5)被四舍五入,输出123500。当第二个参数为0时候,结果相当于对数字取整并四舍五入。

还有使用sprintf对数据四舍五入:


   
  1. $n=0.1265489;
  2. echo sprintf("%.2f", $n); // 0.13

$_GET

http://localhost/api?a=1+2&b=1%3&c=yy3#4&d=6@22


   
  1. echo $_GET["a"]; //1 2
  2. echo $_GET["b"]; //1%3
  3. echo $_GET["c"]; //yy3
  4. echo $_GET["d"]; //报错:Undefined index: d

$_GET会把'#'字符后面的过滤掉(所以上面报错不识别d),‘+’会转为空

PHP两种数组合并方式区别示例

对于重复的字符串键,+操作后,前面数组的键值会覆盖后面的

对于重复的数字键,+操作后,前面数组的键值会覆盖后面的,保留之前数字键

对于重复的字符串键,array_merge后,后面数组的键值会覆盖前面的

对于重复的数字键,array_merge后,重排数字键,不会覆盖

参考文章

PHP ...$arg使用

在PHP 5.6及更高版本中,参数列表可能包含...标记,表示该函数接受可变数量的参数。参数将作为数组传递给给定变量


   
  1. <?php
  2. //声明时使用
  3. function sum(...$numbers) {
  4. //var_dump($numbers); //$numbers是个数组值为:[1,2,3,4]
  5. $acc = 0;
  6. foreach ($numbers as $n) {
  7. $acc += $n;
  8. }
  9. return $acc;
  10. }
  11. //10
  12. echo sum(1, 2, 3, 4);
  13. ?>

   
  1. <?php
  2. //调用时使用
  3. function add($a, $b) {
  4. var_dump($a);//int(1)
  5. var_dump($b); //int(2)
  6. return $a + $b;
  7. }
  8. //3
  9. echo add(...[1, 2])."\n";
  10. //3
  11. $arr = [1, 2];
  12. echo add(...$arr);//$arr的值会循环赋值给add里面的参数($a为1,$b为2)
  13. ?>

参考文章

获取每个月的第一天和最后一天


   
  1. echo date("Y-m-d H:i:s",strtotime('first day of today')); //2020-04-01 00:00:00
  2. echo date("Y-m-d H:i:s",strtotime('last day of 23:59'));  //2020-04-30 23:59:00

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/106324610

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。