面试中遇到的一些问题

  1. 不使用第三个变量交换两个变量的值:
    1. //字符串版本 结合使用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 />';
  2. 将1234567890转换成1,234,567,890 每3位用逗号隔开的形式

        是对于数字函数的运用的考察 :number_format();
         https://blog.csdn.net/json_ligege/article/details/52145109
    
  3. 字符串大小比较,相关函数:

    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
    结论:字符串比较不使用函数的情况下会按照字符串顺序依次进行比较,规则为:小写字母>大写字母>字符串类型的数字
    
  4. 二维数组排序

    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 按照降序排序。
    
  5. 魔术方法

  6. 序列化,反序列化 serialize()unserialize()

  7. 字符串大小写函数

    每个单词的首字母转换为大写:ucwords()
    第一个单词首字母变大写:ucfirst()
    第一个单词首字母变小写:lcfirst()
    所有字母变大写:strtoupper()
    所有字母变小写:strtolower()
    
  8. 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);

单点登录,oauth2.0 协议,跨域,nginx重定向配置

 
posted @ 2019-03-27 18:44  格兰迪主c  阅读(82)  评论(0编辑  收藏  举报