面试中遇到的一些问题
-
不使用第三个变量交换两个变量的值:
//字符串版本 结合使用substr,strlen两个方法实现 $a="a"; $b="b"; echo '交换前 $a:'.$a.',$b:'.$b.'<br />'; $a.=$b; $b=substr($a,0,(strlen($a)-strlen($b))); $a=substr($a, strlen($b)); echo '交换后$a:'.$a.',$b:'.$b.'<br />'; echo '-----------------------<br/>'; //字符串版本 使用str_replace方法实现 $a="a"; $b="b"; echo '交换前 $a:'.$a.',$b:'.$b.'<br />'; $a.=$b; $b=str_replace($b, "", $a); $a=str_replace($b, "", $a); echo '交换后$a:'.$a.',$b:'.$b.'<br />'; echo '-----------------------<br/>'; //字符串版本 结合使用list方法和array实现 $a="a"; $b="b"; echo '交换前 $a:'.$a.',$b:'.$b.'<br />'; list($b,$a)=array($a,$b); echo '交换后$a:'.$a.',$b:'.$b.'<br />'; echo '-----------------------<br/>'; //字符串和数字都适用 使用异或运算 $a='a'; $b='b'; echo '交换前 $a:'.$a.',$b:'.$b.'<br />'; $a=$a^$b; $b=$b^$a; $a=$a^$b; echo '交换后$a:'.$a.',$b:'.$b.'<br />'; echo '-----------------------<br/>'; //只适用于数字 $a=3; $b=5; echo '交换前 $a:'.$a.',$b:'.$b.'<br />'; $a=$a+$b; $b=$a-$b; $a=$a-$b; echo '交换后$a:'.$a.',$b:'.$b.'<br />';
-
将1234567890转换成1,234,567,890 每3位用逗号隔开的形式
是对于数字函数的运用的考察 :number_format(); https://blog.youkuaiyun.com/json_ligege/article/details/52145109
-
字符串大小比较,相关函数:
strcasecmp()对大小写不敏感 strcmp()对大小写敏感 strncmp() 对大小写敏感,可规定用于比较的字符数。 strncasecmp() 对大小写不敏感,可规定用于比较的字符数。 示例: $str1 = 'We are family A'; $str2 = 'We are family B'; if ($str1 > $str2) { echo 'str1 is bigger than str2<br />'; }elseif ($str1 < $str2) { echo 'str1 is smaller than str2<br />'; }else { echo 'equal<br />'; } echo ('Hello'>'hELLo')?1:-1;die; 依次输出为:str1 is smaller than str2 -1 结论:字符串比较不使用函数的情况下会按照字符串顺序依次进行比较,规则为:小写字母>大写字母>字符串类型的数字
-
二维数组排序
array_column() 返回输入数组中某个单一列的值。 array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。 例1: $data = array( array( 'id' => 5698, 'first_name' => 'Bill', 'last_name' => 'Gates', ), array( 'id' => 4767, 'first_name' => 'Steve', 'last_name' => 'Aobs', ), array( 'id' => 3809, 'first_name' => 'Mark', 'last_name' => 'Zuckerberg', ), array( 'id' => 3819, 'first_name' => 'Mark', 'last_name' => 'Zuckerberg', ) ); //根据字段last_name对数组$data进行降序排列 $last_names = array_column($data,'last_name'); var_dump($last_names); array_multisort($last_names,SORT_DESC,$data); var_dump($data);die; 打印结果: Array ( [0] => Gates [1] => Aobs [2] => Zuckerberg [3] => Zuckerberg ) Array ( [0] => Array ( [id] => 3809 [first_name] => Mark [last_name] => Zuckerberg ) [1] => Array ( [id] => 3819 [first_name] => Mark [last_name] => Zuckerberg ) [2] => Array ( [id] => 5698 [first_name] => Bill [last_name] => Gates ) [3] => Array ( [id] => 4767 [first_name] => Steve [last_name] => Aobs )) 例2: 利用usort()数组函数 $arr=array('a'=>array('a'=>3,'b'=>1),'b'=>array('a'=>2,'b'=>3),'c'=>array('a'=>2,'c'=>3)); usort($arr,function($a,$b){ print_r($a); print_r($b); var_dump($a>$b); if ($a==$b) return 0; return ($a>$b)?1:-1; }); print_r($arr);die; 子数组中有相同key时,会判断该key所对应value值大小,无相同key时 usort()函数不会进行排序。 判断大小后,根据返回的值进行排序,如:$a>$b为真并 return 1,按照升序排序;return -1 按照降序排序。
-
魔术方法
-
序列化,反序列化 serialize()unserialize()
-
字符串大小写函数
每个单词的首字母转换为大写:ucwords() 第一个单词首字母变大写:ucfirst() 第一个单词首字母变小写:lcfirst() 所有字母变大写:strtoupper() 所有字母变小写:strtolower()
8.请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功
利用文件锁 flock()
http://www.cnblogs.com/gengyi/p/6399206.html
9.php遍历文件夹中所有的文件
<?php
$file="../../php";
function list_file($date){
//1、首先先读取文件夹
$temp=scandir($date);
//遍历文件夹
foreach($temp as $v){
$a=$date.'/'.$v;
if(is_dir($a)){//如果是文件夹则执行
if($v=='.' || $v=='..'){//判断是否为系统隐藏的文件.和.. 如果是则跳过否则就继续往下走,防止无限循环再这里。
continue;
}
echo "<font color='red'>$a</font>","<br/>"; //把文件夹红名输出
list_file($a);//因为是文件夹所以再次调用自己这个函数,把这个文件夹下的文件遍历出来
}else{
echo $a,"<br/>";
}
}
}
list_file($file);
10.运算符与位运算符
http://www.runoob.com/php/php-operators.html
https://www.cnblogs.com/yeyublog/p/6155771.html
11.cgi,fastcgi https://www.cnblogs.com/studyskill/p/6524220.html
单点登录,oauth2.0 协议,跨域,nginx重定向配置