Day6:递归、include、数组
一、递归
1、递归函数
(1)递:进去
(2)归:出来
注意:
(1)你自己就是这个函数,是你自己调用自己,当自己做完现在的一件事情后,你会做上件你没有做完的事
(2)递归函数一定要有一个条件限制,否则你会陷入死循环
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php function test($a){ echo $a.'<br/>'; if($a>=1){ test($a-1); } echo $a.'<br/>'; } test(3);//3 2 1 0 0 1 2 3 /** 第一次调用 test(3) function test($a){ echo $a.'<br/>'; //3 if($a>=1){ //成立 test($a-1); //test(2) } echo $a.'<br/>'; //这里的东西还没有执行呢,就已经去执行test($a-1) 3 } 第二次调用 test(2) function test($a){ echo $a.'<br/>'; //2 if($a>=1){ //成立 test($a-1); //test(1) } echo $a.'<br/>'; //这里的东西还没有执行呢,就已经去执行test($a-1) 2 } 第三次调用 test(1) function test($a){ echo $a.'<br/>'; //1 if($a>=1){ //成立 test($a-1); //test(0) } echo $a.'<br/>'; //这里的东西还没有执行呢,就已经去执行test($a-1) 1 } 第四次调用 test(0) function test($a){ echo $a.'<br/>'; //0 if($a>=1){ //不成立 test($a-1); } echo $a.'<br/>'; //0 } **/ ?>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //1+2+3+4+5 function sum($a){ if($a>1){ $a+=sum($a-1); } return $a; } echo sum(5); /**分析 第一次 sum(5) function sum($a){ //5 if($a>1){ //成立 $a+=sum($a-1); //$a(5)+=sum(4) 5+=10 15 } return $a; //15 } 第二次 sum(4) function sum($a){ //4 if($a>1){ //成立 $a+=sum($a-1); //$a(4)+=sum(3) 4+=6 10 } return $a; //10 } 第三次 sum(3) function sum($a){ //3 if($a>1){ //成立 $a+=sum($a-1); //$a(3)+=sum(2) 3+=3 6 } return $a; //6 } 第四次 sum(2) function sum($a){ //2 if($a>1){ //成立 $a+=sum($a-1); //$a(2)+=sum(1) 2+=1 3 } return $a; //3 } 第五次 sum(1) function sum($a){ //1 if($a>1){ //不成立 $a+=sum($a-1); } return $a; //开始返回1 } **/ ?>
2、加载自定义文件(文件加载)
(1)一个项目里面有可能定义了很多函数,有很多个文件要同时用他们,这个时候怎么办
借助系统指定(将文件包含进来)
include(‘要包含的文件名’);//就相当于把代码拷贝进来
注意:
系统里面有些函数是非函数,他是系统指令,你还可以写成include “”;还有exit()和exit
include_once:它只包含一次文件,检查如果有就不再进行包含
建议使用include 因为include_once还要检测,太浪费时间
require(‘要包含的文件名’);
require_once(‘要包含的文件名’);
注意:
require如果包含错误或者文件不存在,将会产生致命的错误,而include只会给你警告,下面的代码还会继续执行
如果说少了这个包含的文件,我的程序就运行不下去了,我们就用require,相反使用include
二、数组
1、定义:它是一组数据,可以存多个值
2、数组的分类:
(1)索引数组:叫座位号
(2)关联数组:叫名字
3、数组的声明(直接声明)
(1)直接声明
声明索引数组:$arg[0]=1;
声明关联数组:$arg['name']='licy';
(2)键(key、下标):数组中数据对应的表示,就是我刚才写的0和name
(3)值(value):数组中下标所对应的数据
(4)元素:键和值的组合通常称为一种元素
(5)数组的使用:
$arg[0]:数组名[下标]
(6)数组的特性
可以使用中括号来声明操作数组,但也可以使用大括号来声明数组,建议使用[]中括号
声明数组时可以不加下标,直接写中括号,默认为索引数组,下标从0开始,依次自增
单独使用中括号,而不指定值时,索引下标为出现过的最大下标的索引加1
声明数组时, 索引下标可以不连续
声明数组的下标可以为负数,但是没有太大意义
如果说下标有重复的情况下,后面的会覆盖前面的(索引和关联数组都是一样的)
如果说声明关联数组时不加引号来包含下标,将会当做常量来使用
关联数组和索引数组可以存在一个数组中,但是很不常见
数组的关联下标不会影响到索引下标的排列规则
4、数组的声明(array)
(1)使用array()语法来声明 $arr=array()声明了一个空数组
$arr=array(1,2,3,4,5,6)
$arr=array('name'=>'licy','age'=>13,'sex'=>'男')
(2)注意:
array()如果不指定下标,默认是索引数组,而且下标从0开始
array()可以指定下标,使用=>操作符来声明,索引、关联数组都可以
5、数组的声明([]):array的简写方式
(1)使用中括号来直接声明数组$arr=['name'=>'licy','age'=>13,'sex'=>'男']
(2)新版本里有一种新的方式来使用:函数名()[]
6、删除数组元素
(1)unset():直接在内存中释放了
(2)重新设置为null
注意:
使用unset释放掉数组中的元素后,下标也会删除,但是下标不会重新索引
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('Content-type:text/html;charset=utf-8'); $arr=array('licy','zhangsan','lisi','wangwu','zhaoliu'); unset($arr[1]);//直接释放掉了,连下标都没有了 //$arr[1]=null;//下标还有,但是值已经设置为NULL var_dump($arr); ?>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('Content-type:text/html;charset=utf-8'); $arr=array(1,2,3,4,5); unset($arr[4]); $arr[]=6; var_dump($arr);//array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [5]=> int(6) } ?>
7、多维数组
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('Content-type:text/html;charset=utf-8'); $dh=array( 'maoxian'=>array('功夫巨人','熊出没','火影忍者'), 'gaoxiao'=>array('小虎还乡','喜洋洋','樱桃小丸子'), ); echo '<pre>'; var_dump($dh); echo '</pre>'; ?>
(1)维度:就是在数组里面再放数组,(可以是关联数组,也可以是索引数组)
8、数组的遍历(for):只能是索引数组
(1)通常我们使用数组是使用$arr[0]来进行取值
(2)count():用来获取数组元素的个数
注意:
数组的下标必须是连续的,最好从0开始
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('Content-type:text/html;charset=utf-8'); $arr=array('a','b','c','d'); $count=count($arr); for($i=0;$i<$count;$i++){ echo $arr[$i]; } ?>