继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

云知梦PHP笔记(三)未完待续

Wizey
关注TA
已关注
手记 37
粉丝 6195
获赞 1548

20.php的执行过程
加载页面,语法检测(加载函数),执行脚本

21.php数组
数组是由多个元素组成,每个元素由key-value,value有八种数据类型
索引数组和关联数组的混合使用,关联数组的使用不影响索引数组的下标
例如:$arr = array("name" => 1, 2, 3, 100 => 4, 5, "age" =>6),它们的下标打印为"name", 0, 1, 100, 101,"age"
数组取值printf_r($arr);
数组赋值,$arr['age'] = 30,数组赋值也可以定义数组,$arr[] = 1; $arr[] = 2;这些内容意义不大
三种方法来进行数组遍历
for循环来进行带数字索引数组遍历,而foreach()可以遍历一切数组,foreach($arr as $key => $val),as就是从$arr中取值$val,然后再在循环里面打印数组的值,关联数组索引被称为键值对,list和each遍历数组,感觉麻烦,while(list($key,$val) = each($arr)){echo "<h1>{$key}:{$val}</h1>";
多维数组,数组里面套数组,例如二维数组:$arr = array(1, 2, array(4,5));
一张数据表其实就是一个二维数组,里面的每一行记录就是一个一维数组
22.超全局数组
$_SERVER 查看服务器信息,用print_r打印服务器相关信息,不要用echo
$_GET 获取get提交过来的数据,两个页面之间通讯,表单传值(get方式,post方式),a标签传值(get传值),get传值的可以在地址上看到,不安全,a标签推荐使用get提交数据,表单推荐使用post处传值方式,而$_POST获取表单post传过来的数据,$_REQUEST获取a标签或者表单get或者post过来的数据
$_REQUEST 等于$_GET和$_POST
cookie和session前面不能有输出
$_COOKIE 同一个变量在多个页面获取到
$_SESSION 同一个变量在多个页面获取到
$_FILES 获取表单中的文件,并生成一个数组
$GLOBALS 里面包含页面内的全局变量,在函数里面改变一个外部变量的值,可以用$GLOBALS[$name] = "...";

23.数组函数
数组的键值操作函数
array_keys();获取数组中的键,参数是数组名
array_vals();获取数组中的值,参数是数组名
array_key_exists();检查一个键是否在数组中
in_array();检查一个值是否在数组中,里面的参数是"值"和数组名
array_flip();键和值对调,参数是数组名
array_reverse();数组中的值反转,也就是函数返回一个和原来数组顺序相反的数组

统计数组的元素和唯一性
count();统计数组元素个数
array_count_values();统计数组中相同值的个数,并返回一个新的数组
array_unique();删除数组中重复的值

使用回调函数处理数组的函数(过滤)
array_filter();数组值过滤,筛选出符合条件的值,参数是数组名和条件
array_map();将回调函数作用到给定数组的元素上,参数是函数和数组,返回一个新数组

数组的排序函数
sort();升序排列,不保留key
rsort();降序排列,不保留key
asort();保留key升序排列
arsort();保留key降序排列
ksort();根据值对key升序排列,排列后key和value互换
krsort();根据值对key降序排列,排列后key和value互换
natsort();用自然排序算法升序排列,如果想降序排列,可以再使用array_reverse()函数倒转
natcasesort();忽略大小写升序排列
array_multisort();多个数组进行排序

拆分、合并、分解与结合函数
explode();拆分函数,例如:explode("-",$arr);
join();//implode();都是合并函数
array_slice();参数是变量名,起始标量,终止标量,例如:array($arr, 0, 3);正数是从左到右截取,负数是从右到左截取,变成一个数组,而原来的数组不变
array_splice();用法和array_slice类似,不一样的是它不但产生一个新数组,还会把原数组变成截取后剩下的部分,更厉害的是它还可以在原数组裁剪的地方添加元素,例如array_splice($arr, 0, 3, array("ff", "gg", "hh"));所添加的元素会放到原数组的被裁剪的地方
array_merge($a, $b);合并两个数组变成一个数组
array_combine($a, $b);和并联个数组使前面的数组变成后面数组的下标
array_intersect();取两个数组的交集
array_diff();前面的作为参照物,取后面数组中的和前面不一样的元素,求差集

数组与数据结构
array_pop()弹出数组的最后一个元素,改变原数组,并返回一个新数组,和unset()不一样
array_push();返回新数组的元素个数,改变原数组
array_shift();在数组最前面弹出一个值,返回移出值,原数组下标重排
array_unshift();在数组前面插入一个值,返回数组个数

其他有用的数组处理函数
array_rand();随机取一个key
shuffle();打乱一个数组
array_sum;求数组所有值的和
range();获取一个范围内的数组,两个参数,可以做验证码

24.字符串
echo和print的区别,echo可以连接多个字符串,例如:echo "aaa","bbb","cccc";而print不能
printf可以格式化输出,和C语言一样,有格式说明符%s,$d
sprintf也可以格式化,但不直接输出,而是返回一个字符串
用点.来连接字符串

字符串函数
去除空格和字符串填补的函数(解决用户名因多敲了空格而造成不能登录)
ltrim();去除字符串左边的空格
rtrim();去除字符串右边的空格
trim();去除字符串左右两边的空格
str_pad();填充字符串的长度,使用另一个字符串填充字符串为指定长度,例如echo str_pad($str, "-", (STR_PAD_LEFT));最后一个参数可写可不写
str_repeat(); 将一个字符串重复多少次,例如echo strrepeat("",3),输出 ___
strlen();获取字符串长度

字符串大小写转换函数
strtoupper();
strtolower();
ucfirst();字符串的首字母大写
ucwords();字符串的每一个单词的首字母都大写

与html相关联的字符串函数(结合着数据库来看)
nl2br();把\n转成br标签,例如echo nl2br("aaaa\nbbb\ccc");和其他语言交互的时候使用可以换行
htmlspecialchars();转实体,转“、< > &”,对于恶意输入,原样输出
strip_tags();去掉html标签,也可以保留一部分,在参数后面加上所要保留的标签,记着加双引号
addslashes();转义' " \ ,在它们前面加上\,和C语言的转义字符一样,默认php开启
stripslashes();去掉addslashes默认加的\

字符串比较函数(ASCII码)
1.按字节进行字符串的比较
strcmp($str1, $str2);比较字符串的每个字节
strcasecmp();忽略大小写比较字符串的每个字节
2.按自然排序时字符串的比较
strnatcmp();按自然排序比较字符串中的数字
strnatcasecmp();按自然排序忽略比较字符串中的数字
字符串的分割与拼接(和前面数组部分一样)
1.分割 explode();把字符串分割成数组
2.拼接implode()(join());把字符串拼接成字符串

字符串的截取
substr();参数为变量名,起始位置坐标(从0开始),终止位置坐标。需要注意编码问题,可以统一字符编码,例如:(这个是支持多字节的)echo mb_substr($str, 0, 6,"utf-8"),不管是中文字符还是英文的字符,都会截取前6个

查询字符串
1.strstr();查找指定字符在字符串中的第一次出现,返回一个字符串,但不够精确
2.strrchr();查找指定字符在字符串中的最后一次出现
3.strpos();查找指定字符在字符串第一次出现的位置
4.strrpos($str, 'w');w在$str中最后一次出现的位置

字符串替换
1.str_replace();参数是两个字符串和一个字符串名字,后面的替换前面的,但是想替换多个不同的字符串,可以把它们放在一个数组中,然后用数组作为第一个参数,就可以实现多个替换了,并且还可以实现多个替换多个,就是把第二个参数也变成数组,两个数组对应替换

字符串拆分常用函数
1.pathinfo($str);
2.parse_url($str);专门针对url地址拆分
3.parse_str($str['query'], $arr);拆分更具体
4.preg_split('/ /',$srr['']);正则拆分

其他字符串函数
strrev();字符串翻转
strlen();字符串长度
number_format();格式化数字字符串,每三个字符加一个(,),还可以选择保留几位小数,可以按照自己的要求格式化
md5();md5加密后的字符串,加密后是一个32位字符串
str_shuffle();随机输出字符串,和数组里面的shuffle一样

25.建议在数据插入数据库之前进行三道把控
1.[b]aaaaaa[/b] UBB代码,使用strip_tags过滤一部分html标签
2.addslashes()
' " \ 前加上\,防止对数据库造成破坏
3.htmlspecialchars()
将' " < > & 转成实体,防止对数据库造成破坏

26.正则表达式
正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割,匹配,查找及替换操作,在PHP中正则表达式一般是由正规字符和一些特殊字符联合构成的一个文本模式的程序性描述,本次采用perl兼容的正则表达式
1.原子
.(点) 代表任意一个字符,但不能匹配换行符\n
\w 代表任意一个字母、数字、下划线
\W 除了字母、数字、下划线以外的任意一个字符
\d 代表任意一个数字
\D 代表任意一个非数字
\s 匹配空白字符、空格、tab
\S 除了空白字符、空格、tab
. 转义字符,代表一个普通字符 .(点)
[abc] 它里面的任意一个字符
[^abc] 它里面除了abc的任意一个
() 单元

2.元子符
*(星号) 0个、一个、多个 修饰前面任意多个原子
+(加号) 一个、多个,至少有一个
?(问号) 0个、多个,可有可无的,一般和单元结合使用

^ 以什么开头的
$ 以什么结尾的
\b 词边缘
\B 非词边缘
{2} 2个原子
{2,} 2个前面的原子
{2,5} 2-5个前面的原子
3.模式修正符
/正则表达式/U
i, m, s, U, e
i 忽略大小写
m 视为多行
s 视为一行
U 贪婪模式,最大化细致匹配模式
e 替换的时候用的,可以用函数加工向后
4.例子
$str = "LINUX and php are lamp or linux is good";
$ptn = '/linux/i';//匹配出字符串中的linux
preg_match_all($ptn, $str, $arr);
echo "<pre>";
print_r($arr);//可以匹配出LINUX和linux
echo "</pre>";

eval让字符串表达式可以执行

27.正则表达式函数
字符串的匹配与查找
1.preg_match();正则表达式匹配
2.preg_match_all();正则表达式全匹配
3.preg_grep();可以做搜索
字符串替换
4.preg_replace();正则表达式替换
字符串分割
5.preg_split(); 正则表达式分割

28.数学函数
注: 参数有两种,1.多个数字,2.多个数字组成的数组
1.max(10,5,8);
2.min();

29.日期函数
1.time();当前的时间戳,也即离1970年1月1日0点0分0秒C语言和unix诞生的起源时间,32位机器在2038年会出现时间溢出
2.date("Y-m-d H:i:s");
参数有Y(2016年)y(16)m(09月)n(9月,不带零) d(05日)j(5日,不带零)
H:24小时制的 h:12小时制的 i:00-59分 s:00-59秒
w(0-6 周日-周六)t(31)一个月多少天 L是否为闰年
A:AM或PM a:am或pm
年月日,时分秒,小y代表年的后两位,有时区规则
3.strtotime();将字符串日期转成时间戳,可以是未来的时间也可以是过去的时间,如2016/9/11或者2015-3-4
4.microtime(); 1秒=1000毫秒=1000000微秒
要想将两个时间进行数学运算,需要传给microtime里面的参数为1
5.sleep(1)耽搁一秒钟
与时区有关的函数
1.date_default_timezone_set("时区名字缩写");中国的缩写是PRC
2.date_default_timezone_get();默认的时区,这个和PHP的配置文件有关,在php.ini里面可以修改默认的时区,这样就不用设置默认的时间了
5.date_timezone_set();
6.date_timezone_get();

打开App,阅读手记
16人推荐
发表评论
随时随地看视频慕课网APP

热门评论

赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞

111111111111111111111111111111111


查看全部评论