PHP 简介05-数组/正则/时间函数
1.数组
1.数组
1.分类
索引数组:键为 int
关联数组:键为 string
混合数组:键为 混合类型(字母,数字,汉字,字符串….)
2.键:
别名:下标,偏移量,索引
3.值:
可以为任意类型
4.格式:
$数组名[ 键 ] = 值;
$数组名 = [ 键1 => 值1,键2 => 值2,键3 => 值3,... ];
5.索引数组
1)数组的键为一系列有一定规律的数字组成,当键不是 int 型时,会强制转化为 int 。
2)当没有指定键时:默认从0开始;从已有记录过的最大键开始+1;
6.关联数组
1)数组的键为字符串组成,没有特别的顺序和规律
2)如下一些键值可能会产生同样的效果:
# 1 = 1.xxx =true
# 0 = 0.0 = '0' = false
# null = 空字符串 = 未定义变量
# 非法键:数组,对象
# 资源虽然可以作为键,但是不推荐
键既有数字,又有字符串,一般称之为混合数组
7.多维数组
数组间发生嵌套关系,即可称之为多维数组
多维数组的操作,需要操作几维数组,就需要几个[ ]
1 | $name=[ |
另一个写法:
1 | $name=['a'=>[1,2,3,4,5,],'b'=>[2,3,4,5,6,6]]; |
8.遍历数组
1.索引遍历 for
对于键为有规则的数字,可以用索引遍历
1 | $name = ['貂蝉', '西施', '王昭君', '杨玉环']; |
2.指针遍历 point
对于没有规则的数字键,是很难通过for遍历出来
常用函数:
key( ) 返回当前指针所指向的键
current( ) 返回当前指针所指向的值
相对移位:
next( ) 下移一位
prev( ) 上移一位
绝对移位:
reset( ) 指针直接指向数组的第一个键值对
end( ) 指针直接指向数组的最后一个键值对
注意点:
当使用 next 和 prev 移出范围之外时,无法通过next和prev再移动回来,返回键为 null ,值为 false。
一般使用键为null来作为遍历终止条件
1 | $name = [4=>'貂蝉', 1=>'西施', 99=>'王昭君', 12=>'杨玉环']; |
3.指针遍历 each
each()函数自带current+key+next
1 | $name = [4=>'貂蝉', 1=>'西施', 99=>'王昭君', 12=>'杨玉环']; |
4.扩展循环结构: foreach
格式:
foreach( 数组 as 键 => 值 ){ 代码块 }
简化版:当不需要使用键时
foreach( 数组 as 值 ){ 代码块 }
1 | $name = [4=>'貂蝉', 1=>'西施', 99=>'王昭君', 12=>'杨玉环']; |
2.预定义数组
1.$GLOBALS 存储全局环境中所有的可用变量
2.$_GET 接收所有以get方式传输的值
3.$_POST 接收所有以post方式传输的值
4.$_FILES 专门用于接收上传文件
5.$_COOKIE 存储浏览器中的cookie值
6.$_SESSION 存储服务器中的session值(不重复登录)
7.$_REQUEST 同时接收get,post,cookie 的值
8.$_SERVER 存储服务器相关的信息,包含地址,IP,服务器环境等
1 | var_dump($_SERVER) |
9.当 method=get , action带参数时,action 的参数会被全部抛弃
解决方案:将 action 的参数通过隐藏域进行传递
1 | <form action="http://localhost/s86/0416/09-server.php?name=999&age=99" method="get"> |
10.上传文件
三个必要条件:
- file表单必须要有name,用以在PHP端接收内容
- form表单中
method = post - form表单中
enctype=multipart/form-date
单文件上传:
<input type="file" name="xxx">
多文件上传:
1.需要在name值得最后面加 [ ],形成数组接收多内容
2.file 添加 multiple 属性
3.字符串数组
把字符串当做数组来使用
1 | $str = 'i love you'; |
2.正则表达式
1.定义:正则表达式就是用某种模式去匹配字符串的公式
2.功能:主要用于字符串的查询,替换操作
3.组成:由正规字符和一些特殊字符组成
4.特征:
- 小而强大 的控制源(正则集的代数)
- 存储大
- 读取快
1正则语法规则:
包含:定界符,原子,元字符,模式修正符
2.定界符:
表示一个正则表达式的开始和结束,有以下三种方式:
/ [0-9] /一对斜线#[0-9]#一对井号{[0-9]}一对大括号
3.原子:
表达式中代表一个匹配单元的个体,分为可见原子和不可见原子
不可见原子:
- 换行符
\n - 回车
\r - 制表符
\t - 空格
- 其他不可见符号
4.元字符
1)原子的筛选方式:
|匹配两个或多个分支选择[ ]匹配方括号中的任意一个原子[^]匹配除了方括号中的原子之外的任意字符
2)原子的集合(将某一类原子归类简化)
.匹配除换行符之外的任意字符\d匹配任意一个十进制数字,即[0-9]\D匹配任意一个非十进制数字,即[^0-9]\s匹配一个不可见原子,即[\n\t\r]\S匹配一个可见原子,即[^\n\t\r]\w匹配一个数字、字母或下划线,即[0-9a-zA-Z_]\W匹配一个非数字、字母或下划线,即[^0-9a-zA-Z_]
3)量词(查找字符串中某个原子连续出现多少次)
{n}表示其前面的原子出现n次{n,}表示其前面的原子至少出现n次{n,m}表示其天免得原子出现了n~m次*匹配0次,1次或者多次其前的原子,即{0,}+匹配1次或者多次其前的原子,即{1,}?匹配0次或者1次其前的原子,即{0,1}
4)便捷控制,模式单元和模式选择符
^匹配字符串开始的位置$匹配字符串结尾的位置( )匹配其中的整体为一个原子(|)匹配其中的两个或者更多的选择之一,分隔多选一模式
5.模式修正符
贪婪匹配
.*匹配结果存在歧义时取其长(默认)懒惰匹配
U匹配结果存在歧义时取其短,同.*?忽略空白
x匹配结果忽略空白大小写匹配
i匹配结果不区分大小写中文适配
u把中文汉字当做一个字符计算
6.正则的基本使用
正则在PHP中就是字符串类型
1.函数:
1)preg_match(正则,字符串 [,匹配结果]) (单词匹配函数)
返回值:匹配的次数(0-失败;1-成功)
2)preg_match_all(正则,字符串 [,匹配结果]) (全部匹配函数)
返回值:字符串中匹配字符的个数
3)preg_replace(正则,替换值,对象) (替换匹配字符串函数)
返回值:替换之后的对象
4)preg_grep(正则,数组) (过滤函数)
返回值:符合过滤条件的字符串
2.后向引用
\1 代表将第一个()内的内容复制到 \1 所在的位置
\2 代表将第一个()内的内容复制到 \2 所在的位置
\n 代表将第一个()内的内容复制到 \n 所在的位置
3.分组概念:()模式单元
在正则中,一旦匹配()的内容,会产生两个效果
1)将()内的内容当成一个整体,以一个大原子的形式看待
2)将()内的内容送入子模式匹配
参与子模式匹配,方便后向引用
若只是单纯想将()内容当成一个整体,不想让()内容参与子模式,可以取消子模式:
(?:正则内容)
4.中文
中文在PHP中默认占3位,模式修正符 u 可以将中文当做一位.
若要统计字符串中有多少汉字,可以匹配 \x{4e00}-\x{9fa5} .
3.时间函数
1.时区
获取时区:date_default_timezone_get()
设置时区:date_default_timezone_set()
默认时区为UTC时区,世界标准时间(英国 格林威治时间)
中国时区为参数 PRC
2.Unix时间戳 time()
time( ) 获取的时间为自1970年一月一日开始到现在的秒数
3.时间戳格式化 date()
date(格式,时间戳)
格式:(严格区分大小写)
1 | // Y 4位年份 |
格式中除了字母外,其他字符都是原样输出
4.创建固定时间点 mktime()
mktime(时,分,秒,月,日,年)
创建的时间点格式也是Unix时间戳
5.英文时间命令 strtotime()
strtotime()
格式:
1 | //now 此刻时间 |
时间上限:2037-12-31 23:59:59
6.延迟 sleep()
sleep(秒数)
7.微秒 microtime()
microtime() 将时间戳微秒数显示出来
参数:false(默认)微秒数在前,较精确
true 将微秒数置后,方便参数计算