1)求出下面的结果。
$arr = array('1','2','3');
unset($arr[0]);list($a,$b) = $arr;echo $a;echo $b;$a 结果为:空并报错(Undefined offset: 0)。$b结果为 2;
注意:由于list()函数,该函数只用于数字索引的数组,且假定数字索引从0开始
2)书写一个单例模式;
3)排序算法以及复杂度
4)php中有哪些魔术方法
__construct() :构造方法,实例化对象时调用
__destruct():析构方法,销毁对象时调用
__call():对象调用某个方法是,若属性存在该方法,则直接调用,若不存在改方法,则调用__call函数
__get():读取一个对象属性时,若该属性存在,则直接返回,若不存在,则调用__get函数
__set():设置一个对象属性时,若该属性存在,则直接赋值,若不存在,则调用__set函数
__isset():检测一个对象属性是否存在时被调用
__unset():销毁一个对象属性时被调用
__wekeup():预先准备对象需要的资源,经常用在反序列化unserialize()时被调用,例如重新建立数据库链接,或执行其它初始化操作。
__sleep():执行serialize()函数时被调用,此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组,如果该方法未返回任何内容,则null被序列化,并产生一个E_NOTICE级错误
__toString():打印一个对象时被调用,此方法返回的必须是一个字符串,否则会发出一条E_RECOVERABLE_ERROR级别的错误。
__clone():克隆对象时被调用
5)php数组常用函数
6)写出下列函数的意义
split——用正则表达式将字符串分割到数组中
str_split(string,length)——函数把字符串分割到数组中
explode(‘’,$str)——使用一个字符串分割另一个字符串,返回数组
implode()——将一个数组值转化为字符串
7)字符串常用函数
8)预定义变量
$_SERVER['DOCUMENT_ROOT']//当前运行脚本所在的文档根目录
$_SERVER['HTTP_HOST']//当前请求的Host头部的内容
$_SERVER['REMOTE_ADDR']//正在浏览当前页面用户的IP地址
$_SERVER['SERVER_NAME']//当前运行脚本所在服务器主机的名称
$_SERVER['HTTP_REFERER']//链接到当前页面的前一页面的URL地址
9)POST和GET的区别
POST:
(1)最大容量根据php.ini文件配置,默认为8M。
(2)post是实体数据,可以通过表单提交大量的信息。
GET:
(1)大小限制在2KB。
(2)get是发送请求HTTP协议通过url参数传递进行接收。
10)mysiam和innodb的区别
11)memcache和redis的区别和联系
12)时间搓和时间日期相互转换的函数。
PHP相关函数:
1,日期转换为时间搓 strtotime('2018-11-27 13:29:30')。
2,时间搓转换为时间 date(‘Y-m-d H:i:s’,1156219870)。
mysql相关函数:
1,时间转换为时间搓 unix_timestamp()。
2,时间搓转换为时间 from_unixtime()。
13)PHP安全问题
14)优化sql语句执行效率的方法
1.尽量选择较小的列。
2.将where中用的比较频繁的字段建立索引。
3.select子句中避免使用‘*’。
4.避免在索引列上使用计算、not in和<>等操作。
5.当只需要使用一行数据的时候使用limit 1。
6.保证单表数据不超过200w,适时分割表。
7.针对较慢的语句,可以使用explain来分析该语句具体执行情况。
15)对于大流量的网站,用什么方法解决。
1.确认服务器硬件能否支持当前的流量
对于普通的pc server来说,它能够独立支持每天10万个独立ip访问,如果访问量过大,最好用性能更高的专用服务器。
2.优化数据库访问
服务器的负载过大,一个重要的原因就是cpu和内存负载过高,而读写数据在这块占据较多的资源,可以从页面静态化、memcache缓存和mysql优化几个方面着手。
3.禁止外部盗链
占用较大的流量,防盗链,使用reference来判断一下,如果是图片的话,使用添加水印即可很好的防止。
4.控制大文件的下载
最好把文件下载的容量控制为相对较小的一个值,如果有大文件下载,最好使用专用的服务器。
5.使用多台主机实现分流,集群
6.使用流量分析软件进行分析统计(谷歌、百度)
16)数据集合为$arr = [0=>['id'=>1,'name'=>'A'],1=>['id'=>2,'name'=>'B'],3=>['id'=>3,'name'=>'C'],...]
请建立如下两组数据,用您认为最简单的方式来实现。
(1)[1,2,3...](提取id数组)
(2)[['1'=>'A'],['2'=>'B'],['3'=>'C'],...](id,name的键值对)
解答:(1) array_column($arr,'id);
(2) array_column($arr,'name','id');
注:array_column(array,column_key,index_key)——返回数组中某个单一列的值。(php5.5以上)
array:必需。规定要使用的多维数据(记录集);
column_key:必需。需要返回值的列,可以是索引数组的列的整数索引,或者是关联数组的列的字符串键值。
该参数也可以是NULL,此时将返回整个数组(配合index_key参数来重置数组建的时候,非常有用)。
index_key:可选,用作返回数组的索引/键的列。
17)计算二维数组中某一元素之和
$arr[0]=array('name'=>'小一','score'=>80);
$arr[1]=array('name'=>'小二','score'=>85);
计算score的和
解答:
方法一:
echo array_sum(array_map(function($val){return $val['score'];}, $arr));
或:
echo array_sum(array_map(create_function('$val', 'return $val["score"];'),$arr));
方法二:
$sum = 0;
foreach($arr as $val){ $sum += (int) $val['score']; }