原文来自:http://www.cnblogs.com/sows/p/6032570.html (博客园的)风马一族 侵犯版本,后果自负
回顾
匿名函数
定义: 变量 = function [参数列表]{};
使用:变量(参数列表);
伪类型
mixed:混合
number:数值
void: 空,没有
callback:回调函数
可变函数
通过一个变量保存一个函数的名字,然后通过调用变量,给变量增加括号,从而实现调用函数
function display() {//函数体}
$var = 'display';
$var(); //将$var的值获取,拼凑括号,然后执行对应的函数
数据类型转换
自动转换
强制转换:integer 、 float、 string、 Boolean、 array、 object
数据类型判断
以is_开始,后面跟数据类型,返回的结果都是布尔类型
is_scalar:标量判断
is_number: 数值判断(数值字符串)
文件包含
页面布局,代码重用
include,require和include_once,require_once
include和indlude_once的区别:include每次包含都会去加载一次文件,include_once只加载目标文件一次
include和requirer的区别:include可以在目标文件不存在的情况下进行包含,不会终止当前脚本的执行,require必须要求目标文件存在,否则终止当前脚本执行
脚本中断
return、die和exit
基于return ,可以实现配置文件
系统函数
字符串函数、时间函数、数学函数
数组
1.什么是数组?
解释1:数组就是一个变量中存储多个数据的特殊变量
解释2:数量就是在内存里有一块连续的内存空间(堆空间),这里面可以保存多个数据,数据没有数据类型的限制。
2.PHP数组与其他语言的数组区别:
a) PHP数组没有长度限制,其他语言C必须事先指定数组长度,如果超出长度,就称这为溢出。
b)PHP数组没有数据类型限制,其他语言C在事先必须声明数组能存储的数据类型
c)数组的下标可以是数值也可以是字符串
数组基本语法
1. 关键字 array
2. 显示数组语法
$arr = array(数值1,数值2,数值3。。。);
访问数组
数组本质是变量,访问的时候就是直接使用变量,但是因为数组元素有多个,而系统没有办法直接区分到底用户是访问的哪一个,所以需要用户在访问数组的时候,使用数组下标(键名)
语法:$数组名[下标]
数值下标:$arr[数值]
字符串下标:$arr['字符串'];
数组分类
根据数组的下标的不同进行分类
索引数组:当前数组的下标(键名)全是数字(整型)
关联数组:当前数组的下标全是字符串
混合数组:数组的下标既是数字,又是字符串
索引数组
定义方式:系统自动分配下标
1 <?php 2 header('Content-type:text/html;charset=utf-8'); 3 4 echo '<pre>'; 5 6 //索引数组 7 //系统自动分配索引序列号(下标键名) 8 //0 = > ,键值对形式 9 10 //显式 11 $arr1= array('a','b','c'); 12 //$arr1 = array(0 =>'a',1 =>'b',2 =>'c'); 13 var_dump($arr1); 14 15 //隐式 16 $arr2[]='a'; //$arr2[0]='a' 17 $arr2[]='b'; //$arr2[1]='b' 18 $arr2[]='c'; //$arr2[2]='c' 19 var_dump($arr2); 20 ?> 21 22 运算结果: 23 array(3) { 24 [0]=> 25 string(1) "a" 26 [1]=> 27 string(1) "b" 28 [2]=> 29 string(1) "c" 30 } 31 array(3) { 32 [0]=> 33 string(1) "a" 34 [1]=> 35 string(1) "b" 36 [2]=> 37 string(1) "c" 38 } 39
定义方式:手动分配下标
1 <?php 2 header('Content-type:text/html;charset=utf-8'); 3 4 echo '<pre>'; 5 6 //索引数组 7 //手动分配索引序列号(下标键名) 8 //0 = > ,键值对形式 9 //显式 10 $arr3= array(3=>'a',2=>'b',1=>'c'); 11 var_dump($arr3); 12 13 //隐式 14 $arr4[3]='a'; //$arr2[0]='a' 15 $arr4[5]='b'; //$arr2[1]='b' 16 $arr4[1]='c'; //$arr2[2]='c' 17 var_dump($arr4); 18 19 $arr5= array('a',6=>'b','c'); 20 var_dump($arr5); 21 ?> 22 23 运算结果: 24 array(3) { 25 [3]=> 26 string(1) "a" 27 [2]=> 28 string(1) "b" 29 [1]=> 30 string(1) "c" 31 } 32 array(3) { 33 [3]=> 34 string(1) "a" 35 [5]=> 36 string(1) "b" 37 [1]=> 38 string(1) "c" 39 } 40 array(3) { 41 [0]=> 42 string(1) "a" 43 [6]=> 44 string(1) "b" 45 [7]=> 46 string(1) "c" 47 }
系统分配索引的方式
1.系统是从0开始分配下标,依次递增1
2.用户可以手动分配下标(下标不能重复:重复的效果就是覆盖)
3.如果用户在某一处指定了下标,那么后续元素自动分配的下标从前面最大值(索引)开始
关联数组
关联数组是使用您分配给数组的指定的键的数组
1 <?php 2 header('Content-type:text/html;charset=utf-8'); 3 4 echo '<pre>'; 5 6 //关联数组 7 //显示创建 8 $arr1=array('a'=>'a','b'=>'b','c'=>'c'); 9 var_dump($arr1); 10 11 //隐式创建 12 $arr2['a']='sows'; 13 $arr2['b']='sows'; 14 $arr2['e']='sows'; 15 $arr2['f']='sows'; 16 $arr2['c']='sows'; 17 var_dump($arr2); 18 19 //访问关联数组 20 var_dump($arr1['a']); 21 ?> 22 23 运算结果: 24 25 array(3) { 26 ["a"]=> 27 string(1) "a" 28 ["b"]=> 29 string(1) "b" 30 ["c"]=> 31 string(1) "c" 32 } 33 array(5) { 34 ["a"]=> 35 string(4) "sows" 36 ["b"]=> 37 string(4) "sows" 38 ["e"]=> 39 string(4) "sows" 40 ["f"]=> 41 string(4) "sows" 42 ["c"]=> 43 string(4) "sows" 44 } 45 string(1) "a" 46 47
访问关联数组:
echo $arr1['1'];
条件:
1. 下标必须使用引号包含
2. 下标不允许重复,重复会覆盖
数组在内存的形式
新建数组内存关系
访问数组内存关系
数组遍历
将数组里面的所有元素都取出来
count(): 对数组长度进行计算,返回数组元素的个数(长度)
1 <?php 2 header('Content-type:text/html;charset=utf-8'); 3 4 echo '<pre>'; 5 6 //数组遍历 7 $arr = array('sows','ceo','风马一族','楼主','风林'); 8 9 //索引数组:下标连续 10 11 //获得数组长度 12 $length = count($arr); 13 14 for($i=0; $i < $length; ++$i){ 15 //输出当前数组元素 16 echo $arr[$i]." "; 17 } 18 ?> 19 20 结果: 21 sows ceo 风马一族 楼主 风林 22
要求:
1. 数组必须是索引数组
2. 所以必须是连续的索引
3. 索引必须从0开始
如果数组是一个关联数组,则不能使用for来循环,来实现数组遍历。因此,PHP提供一个foreach来实现对数组元素的遍历
语法:
foreach (数组名 as $key => $value){
// 使用$key当作当前元素的下标
// 使用$value当作当前元素的值
}
1 <?php 2 header('Content-type:text/html;charset=utf-8'); 3 4 echo '<pre>'; 5 6 //数组遍历 7 $arr = array('sows','ceo','风马一族','楼主','风林'); 8 9 //使用foreach遍历数组 10 foreach($arr as $key=>$value){ 11 echo 'key= '+$key.' value = '.$value.'<br/ >'; 12 } 13 ?> 14 15 结果: 16 0 value = sows 17 1 value = ceo 18 2 value = 风马一族 19 3 value = 楼主 20 4 value = 风林 21
1 <?php 2 header('Content-type:text/html;charset=utf-8'); 3 echo '<pre>'; 4 5 //类型一 6 $arr2['a']='红艳艳'; 7 $arr2['b']='蒿出'; 8 $arr2['c']='sow'; 9 $arr2['x']=234; 10 11 foreach($arr2 as $key=>$Kvalue){ 12 echo 'key= '.$key.' value= '.$Kvalue.'<br />'; 13 } 14 15 //类型二 16 $arr3=array("学生"=>"风马一族","学号"=>12346748,"性别"=>"男","专业"=>"英语"); 17 18 foreach($arr3 as $key => $value){ 19 echo 'key='.$key.' value='.$value.'<br/>'; 20 } 21 ?> 22 23 结果: 24 key= a value= 红艳艳 25 key= b value= 蒿出 26 key= c value= sow 27 key= x value= 234 28 key=学生 value=风马一族 29 key=学号 value=12346748 30 key=性别 value=男 31 key=专业 value=英语 32
foreach原理
数组指针
每个数组都默认有一个指针(定位符),默认指向数组的第一个元素。如果在对数组使用循环遍历,那么该指针会在访问指针当前所指向的元素之后,将自己向下移动一位, 指向下一个元素的地址。如果当指针遍历完最后一个元素,指针会继续下移,从而移除数据空间(元素),从而再次对数组元素进行访问的时候,返回FALSE。
list使用
把数组的元素赋值变量
语法:
list{$username,$userage...}=array
php--list使用示例
因为each返回的结果里有两个索引元素0和1,所以一般使用list与each进行配对使用
php-list与each结合使用
二维数组
一个数组中包含若干数组组成。
php--二维数组使用的示例
访问二维数组
1. echo ['二维数组名']['二维数组的元素名'];
2. print_r(外数组名['内数组名']);
遍历二维数组
php--遍历二维数组
数组的增删改查
$arr = array(); //创建数组
$arr[] ='春节'; //新增元素
$arr[3] = '风马'; //修改元素
unset($arr[2]); //删除元素
php--一维数组的增删改查
php--二维数组的增删改查
数组函数
key : 返回数组中当前元素的键名
php--key得到数组的下标
current :返回数组中的当前元素
php--current得到数组元素的值
next:在返回值之前将内部指针向前移动一位,当移动出数组后,将无法使用prev()退回到数组
php--next指针指向下一位,再返回元素的值
prev:将数组的内部指针倒回一位,当移动出数组后,将无法使用next()退回到数组
php--prev指向的元素退回一位
============
场景:不知道数组的长度
php--使用若干个函数,对数组进行遍历
小结:for 、 foreash、数组相关的函数 可以遍历数组
foreash无需重置指针,其它方式需要在重新访问数组时,重置指针。
===========
end:将数组的内部指针指向最后一个单元
php--end指向数组的最后一个元素
reset:将数组的内部指针指向第一个单元
php--reset指向数组的第一个元素
array_keys :返回数组中部分的或所有的键名
php--array_keys返回数组的所有或部分键名
array_values : 返回数组中所有的值
php--array_values返回数组所有或部分元素的值
数据结构模拟函数
栈:先进后出,压栈(把数据加入到栈里),出栈(把栈里的数据弹出来)
队列:先进先出,入队(从数组尾端插入数据),出队(把数组的元素,从头部出来)
1. 以下四个函数:都是对原数组进行操作
2. 都会重置数组里面的索引
array_shift:将数组开头的单元移出数组
array_unshift:在数组开头插入一个或多个单元
array_push:将一个或多个单元压入数组的末尾(入栈)
array_pop:将数组最后一个单元弹出(出栈)
========
php--使用数组来模拟栈与队的数据结构
========
数组与字符串之间的转换
explode:使用一个字符串分割另一个字符串
此函数返回由字符串组成的数组,每个元素都是 string
的一个子串,它们被字符串 delimiter
作为边界点分割出来。
php--explode的使用示例
implode:将一个一维数组的值转化为字符串
php--implode的使用示例
CAPTCHA:验证码,制作验证码随机字符串
range:建立一个包含指定范围单元的数组
语法: range('起点',‘终点’);
php--range的使用示例
array_rand:从数组中随机取出一个或多个单元
语法:array_rand(数组,数量);
php--array_rand的使用示例
shuffle:将数组打乱
php--shuffie的使用示例
数组合并:+和array_merge()
+: 保存第一个数组的所有元素,如果后面的数组的元素与前面数组的元素的下标相同,那么就忽略。如果不同则加到第一个数组里,最终返回一个数组。
php--+号的使用示例
array_merge(): 先保留第一个数组的所有元素,如果后面数组的元素与前面数组的元素关联下标相同则用后面数组的元素覆盖前面的,如果是索引下标,直接添加到第一个数组后面,重置索引
php--array_merge()的使用示例
通过字符串来随机生成验证码
php--字符串生成随机字符
数组的比较
主要是比较数组长度,数组元素的值
符号: == 和 ===
== : 要求数组长度一致,数组元素的值相等,下标也要相等
===:数组长度一致,值和类型都完全一致,出现的顺序都必须要相同。
php-- ==和===的使用示例
排序算法
冒泡算法,快速排序,选择排序和插入排序。
原理图
排序算法的要求
1. 数组元素都必须是数值
php--冒泡算法的使用示例