<?php
//定一个数组
$arr = [10,1,5,4,7,9,3,6];
//控制轮次数
for($i = 0; $i < count($arr); $i++)
{
//控制次数
for($j = $i + 1; $j < count($arr); $j++)
{
//如果当前值大于后面的值
if($arr[$i] > $arr[$j])
{
//位置交换
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
//输出
echo '';
print_r($arr);
echo '';
?>
2. 和 有什么区别? 请解释一下协议的原因和作用?
1、http无状态协议无法区分用户是否来自同一个网站。 同一用户请求不同页面不能视为同一用户。
2、服务器端存储,客户端保存。 相对安全,可以通过一定的方法进行修改,但并不安全。 取决于交货情况。
禁用后将无法正常使用。 缺点:保存在服务器端,每次读取都是从服务器读取,消耗服务器资源。 保存在服务器端文件或数据库中,默认保存在文件中,文件路径由 指定。 在 PHP 配置文件中。 该文件是公开的。
3、请写出数据类型(int char text)的含义; 它和char有什么区别?
Int 整数 char 定长字符 变长字符 日期时间类型 Text 文本类型与 char 的区别在于 char 是定长字符类型。 它占用的空间与分配的空间一样多。 它是一种可变长度字符类型。 内容有多少就占用多少空间,可以有效节省空间。 由于类型是可变的,当数据长度发生变化时,服务器要执行额外的操作,因此效率比char类型低。
4.isset()和empty()的区别
Isset 判断变量是否存在。 您可以传入多个变量。 如果其中一个变量不存在,则返回 false。 Empty 判断变量是否为空并返回 false。 只能传递一个变量。 如果为空则返回true。
5. 请解释一下PHP中按值传递和按引用传递的区别。 何时按值传递,何时按引用传递?
按值传递:函数范围内对值的任何更改在函数外部都会被忽略
通过引用传递:对函数范围内的值的任何更改也将反映函数外部的那些修改
优点和缺点: 当按值传递时,PHP 必须复制该值。 特别是对于大型字符串和对象,这可能是一项成本高昂的操作。 通过引用传递不需要复制值,这有利于提高性能。
6. PHP中常用的字符操作函数
Trim() 函数可以删除字符串开头和结尾的空格并返回结果字符串。 默认情况下,删除的字符是换行符和回车符(\n 和 \r)、水平和垂直制表符(\t 和 X0B)
ltrim() 函数仅删除字符开头(左侧)的空格
rtrim() 函数仅删除函数末尾(右侧)的空格
将字符串转换为大写
将字符串转换为小写
如果字符串的第一个字符是字母,则将其转换为大写
将字符串中每个单词的第一个字母大写
() 比较两个字符串。 如果它们相等,函数返回 0
() 函数测试字符串的长度
($str,,[int]) 查找$str中从int开始的第一个位置
($str,,[int]) 该函数返回一个字符串在另一个字符串中第一次出现的位置。该函数不区分大小写
($str,,[int]) 从int开始查找$str中最后一次出现的位置
($str,int start[,int]) 从$str 中的 strat 位置开始提取[ ]。
($str1,$str2) 从$str1(第一个位置)开始搜索$str2,从字符串的开头到结尾截取; 如果不是,则返回 FALSE。
七、PHP中常用的数组操作函数 1、变量与数组的转换
() 将变量以变量名的形式组装成数组
<?php
$bianliang1 = '赵';
$bianliang2 = '锐';
$arr = compact('bianliang1','bianliang2');
//返回的结果为
['bianliang1'=>'赵','bianliang2'=>'锐'];
//应用场景1
在TP、Laravel中将查询出来的数据向末班引擎中添加的时候会用到..
() 将数组解析为变量/并反转
<?php
$arr = ['bianliang1'=>'赵','bianliang2'=>'锐'];
extract($arr);
//使用-输出bianliang1(相当于你声明了一次变量,有点向ES6解构赋值的意思)
echo $bianliang1;
2.变量和字符串的转换
<?php
$str = '热爱,喜欢,兴奋';
$arr = explode(',',$str);//表示以字符串中的逗号分隔成数组
//结果为
['热爱','喜欢','兴奋'];
如果解析的字符串为空字符串,则结果为索引为0的数组,且值为空; 它不是一个空数组;
<?php
$arr = ['热爱','喜欢','兴奋'];
//将数组解析成字符串
$str = implode(',',$arr);
//得到的结果为
'热爱,喜欢,兴奋'
3.数组与数组的关系
()联盟关系
<?php
$arr1 = ['赵','上','的'];
$arr2 = ['张','赵'];
//将2个数组合并
$arr_mer = array_merge($arr1,$arr2);
//结果为
['赵','上','的','张','赵']
()差集关系
<?php
$arr1 = ['赵','上','的'];
$arr2 = ['张','赵'];
//获取第一个数组在第二个数组中的差集部分,就是没有的部分
$arr_dif = array_diff($arr1,$arr2);
//结果为
['上','的']
()交集关系
$arr1 = ['赵','上','的'];
$arr2 = ['张','赵'];
//获取2个数组相交集的部分数组
$arr_inter = array_intersect($arr1,$arr2);
//结果为
['赵']
4. 数组值的操作
()删除数组最后一个值
<?php
$arr = ['赵','上','的'];
array_pop($arr);//删除数组最后一个值
//结果为
['赵','上']
()向数组追加一个值
<?php
$arr = ['赵','上','的'];
array_push($arr,'王');//支持多个参数,比如第三个参数 仍然会被追加到数组中去
//得到结果为: (array_push不需要接收,直接引用操作原数组)
echo $arr;
['赵','上','的','王'];
5.判断数组中是否存在该值
() 判断数组中是否存在该值
<?php
$arr = ['name'=>'赵锐庆','age'=>18,'class'=>'大班'];
$bol = in_array('赵锐庆',$arr);//如果存在返回true 否则返回false
//得到结果为true
() 判断key是否存在于数组中
<?php
$arr = ['name'=>'赵锐庆','age'=>18,'class'=>'大班'];
$bol = array_key_exists('name',$arr);//如果值存在返回true,否则返回false
//得到结果为true
6. 数组去重
() 数组
<?php
$arr = ['赵','赵','锐'];
$arr_uni = array_unique($arr);//数组去重
//得到的结果为
['赵','锐']
7.获取二维数组中的值集合
() 获取二维数组中的值集合
$arr = [
['name'=>'赵锐庆','id'=>'one','school'=>'南理工'],
['name'=>'孙悟空','id'=>'two','school'=>'南理工'],
['name'=>'刘德华','id'=>'three','school'=>'南理工'],
['name'=>'朱德','id'=>'four','school'=>'南理工'],
];
//提取name为键的值构成一维数组
$arr_colu = array_column($arr,'name');
//得到结果
['赵锐庆','孙悟空','刘德华','朱德']
//提取那么为键的值切提取对应数组红的id值作为键构成一维键值数组
$arr_colu = array_column($arr,'name','id');
['one'=>'赵锐庆','two'=>'孙悟空','three'=>'刘德华','four'=>'朱德']
8.提取数组的键和值
() 获取数组的键
<?php
$arr = ['name'=>'赵锐庆','id'=>'one','school'=>'南理工'];
$arr_val = array_values($arr);//提取数组中的值
//得到的结果为
['赵锐庆','one','南理工'];
() 获取数组的值
<?php
$arr = ['name'=>'赵锐庆','id'=>'one','school'=>'南理工'];
$arr_key = array_keys($arr);//提取数组中键的集合
//得到结果为
['name','id','school'];
9.返回数组中值的总和
() 返回数组中值的总和
$arr = ['name'=>'赵锐庆','id'=>'one','school'=>'南理工'];
$number = count($arr);
//返回的结果
3
10.返回数组的随机键
() 返回数组中的随机键
$arr = ['name'=>'赵锐庆','id'=>'one','school'=>'南理工'];
$number = array_rand($arr);
//返回的结果
'id'
11. 数组中是否存在搜索值
() 查找数组中是否存在该值
<?php
$arr = ['name'=>'赵锐庆','id'=>'one','school'=>'南理工'];
$is = array_search('赵锐庆'=>$arr);
//返回的结果
'name'
12. 多维数组排序
/*
上面讲的数组排序都是指的一个整体数组,索引数组升序降序等等或者关联数组根据键值对的升序或者排序;
而这里将的排序是一个数组收到其他数组的影响进行排序;其实这种方式就如同对数据库的数据进行升降排序的道理是一致的;
*/
$guys = array(
array('name'=>'jake', 'score'=>80, 'grade' =>'A'),
array('name'=>'jina', 'score'=>70, 'grade'=>'A'),
array('name'=>'john', 'score'=>30, 'grade' =>'A'),
array('name'=>'sss', 'score'=>70, 'grade'=>'C'),
array('name'=>'ben', 'score'=>20, 'grade'=>'B')
);
//如上有一个数组,要求根据score字段升序,相同的情况下根据name字段排序;
$score = array_column($guys,”score”);
$score = array_column($guys,”name”);
Array_multisort($score,SORT_ASC,$name,SORT_DESC,$guys );
8、php读取文件内容的几种方法和函数?
打开文件并阅读。 fopen() fread()
完成后打开读取()
9. 设置和获取过程简述
设定值:
(名称、值、保存时间、有效域);
获取值:$['name'];
10、面向对象中接口和抽象类有哪些区别和应用场景? 具有抽象方法的类称为抽象类。 抽象类不一定只有抽象方法。 抽象方法必须使用关键字定义。 接口中的所有方法都是抽象方法,方法不需要定义。 当多个同类型的类需要设计上层时,通常设计为抽象类。 当需要将多个异构类设计为上层时,通常将它们设计为接口。 11、对于流量大的网站,你们用什么方法来解决流量问题?
优化程序,优化数据库。 如果程序和数据库已经优化,可以采用以下解决方案:
判断当前服务器设备是否满足流量要求。 利用缓存技术将动态内容缓存到文件中,动态网页可以直接调用这些文件,无需访问数据库。 禁止外部盗链。 外部盗链图片和文件会给服务器带来很大的负载压力。 您可以使用refer来禁止外部盗链,或者使用use来配置禁止盗链。 控制大文件的下载。 大文件的下载会占用非SCSI硬盘的大量资源,导致服务器响应速度下降。 使用不同的主机来分流主要流量并平衡服务器上的负载。 利用流量统计软件对网站流量进行统计分析,可以知道哪些地方消耗了大量流量,哪些页面需要优化。 12.使用PHP编写显示客户端IP和服务器IP的代码
获取客户端IP:$("");
获取服务器IP:$[""];
13、编写一个函数,可以遍历文件夹中的所有文件和子文件夹。
<?php
function my_scandir($dir){
$files = array();
if ( $handle = opendir($dir) ){
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
14. 数据库索引有多少种类型? 这些是什么? 什么时候应该使用索引?
普通索引、主键索引、唯一索引
并非所有数据库都以相同的方式使用索引,一般来说,只有当列中的数据被频繁查询时才需要在表上创建索引。
15.写出几个神奇的方法并解释一下它们的效果?
__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方法
__get()当获取未定义变量的值时会自动调用的方法
__construct()构造方法,实例化类时自动调用的方法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用unset()时自动调用的方法
__isset()当对一个未定义变量调用isset()方法时自动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法
16. ++i 和 i++ 哪个效率更高,为什么?
++i 比 i++ 更高效,因为 ++i 少了一个返回 i 的进程。
17.()和()是什么意思?
() 位于 php 配置文件中。 如果设置为on,POST和GET中的字符串将自动转义。 在 ' 之前添加 \
()是php中的一个函数。 如果该参数为true,则从数据库中取出的单引号、双引号、反斜杠会自动用反斜杠进行转义。
18、框架中什么是单入口和多入口,单入口的优点和缺点是什么? 多个条目通过访问不同的文件来完成用户请求。
单个入口点意味着Web程序的所有请求都定向到脚本文件。
单一入口,更容易控制权限,方便对http请求进行安全检查。
缺点:URL看起来不太美观,尤其对搜索引擎不友好。
19、对于关系数据库来说,索引是一个非常重要的概念。 请回答几个关于索引的问题:索引的目的是什么? 快速访问数据表中的特定信息,提高检索速度,创建唯一索引,保证数据库表中每行数据的唯一性,加快表之间的联接。 当使用分组和排序子句进行数据检索时,可以显着减少查询中分组和排序的时间。 索引对数据库系统有哪些负面影响?
负面影响:创建和维护索引需要时间,并且这个时间随着数据量的增加而增加; 索引需要占用物理空间,不仅表需要占用数据空间,每个索引也需要占用物理空间; 当表在增删改查时必须动态维护索引,降低了数据维护速度。
数据表创建索引的原则是什么?
对最常用的字段创建索引,缩小查询范围
对需要排序的常用字段创建索引
什么情况下不适合创建索引? 对于很少涉及查询的列或者重复值较多的列,不适合创建索引。 对于一些特殊的数据类型,不适合创建索引,例如文本字段(text),其取值范围较小。 等待。 20、在Web应用中,数据库的读取频率远高于写入频率。 MySQL如何优化来应对这种情况呢? 21. 和 和 有什么区别?
1.()每次执行文件时读取并评估
()文件只处理一次(实际上是文件内容替换了()语句)
2.()通常放在PHP脚本程序的前面
()的用法与()相同,一般放在过程控制的处理段中。 当PHP脚本文件读取()语句时,将其包含的文件读入。这样可以简化程序执行的流程
3. () 和 () 语句是语言结构,而不是真正的函数。 它们可以像 PHP 的其他语言结构一样。
4. () 和 () 语句在脚本执行期间还包含并运行指定的文件。 与()()唯一的区别是,如果文件中的代码已经包含过,则不会再次包含。
5,() 未能包含文件,停止执行,并给出错误(致命)
()常用于动态包含。
它通常是自动加载的文件。 即使出现加载错误,整个程序也会继续执行。