1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#数组的概念 /* 数组: array,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中的所有数据。 #数组定义语法 在PHP中系统提供多种定义数组的方式: 1、使用array关键字:最常用的$变量= array(元素1,元素2,元素3..); 2、可以使用中括号来包裹数据:v$变量=[元素1,元素2..]; 3、隐形定义数组:给变量增加一个中括号,系统自动变成数组 $变量[]=值1;//如果不提供下标也可以,系统自动生成(数字:从o开始) $变量[下标]= 值;//中括号里面的内容称之为下标 key,该下标可以是字母(单词〉或者数字,与变量命名的规则相似 */ //定义数组:array $a1 = array(1,'2','你好'); var_dump($a1); //定义数组:[] $a2 = [1,'2','你好']; var_dump($a2); //定义数组:隐形 $a3[] = 1; $a3[10] = '春风撩人'; $a3[] = '22'; $a3['key'] = 1314; var_dump($a3); //隐形定义数组,指定下标后,下一次自动定义将从最大下标开始,支持字母定义下标 echo '<hr/>'; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#PHP数组特点 /* 1)可以整数下标或者字符串下标 如果数组下标都为整数:索引数组 如果数组下标都为字符串:关联数组 2)不同下标可以混合存在:混合数组 3〉数组元素的顺序以放入顺序为准,跟下标无关 4)数字下标的自增长特性:从o开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始 5)特殊值下标的自动转换 布尔值: true 和 false 空:NULL 6)PHP中数组元素漫有类型限制 7)PHP中数组元素没有长度限制 补充:PHP中的数组是很大的数据,所以存储位置是堆区,为当前数组分配一块连续的内存。 */ $a4[true] = true; $a4[false] = false; $a4[NULL] = NULL; var_dump($a4); echo '<hr/>'; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#多维数组 //二维数组:数组中所有元素都是一维数组 //定义二维数组: $info = array( array('name' => '小明', 'age' => 30), array('name' => '小葱', 'age' => 28), array('name' => '小红', 'age' => 20) //最后一个元素,后面可以跟逗号不影响但不建议 ); print_r($info); echo '<hr/>'; #多维数组 /* 在第二维的数组元素中可以继续卖是数组,在PHP中没有维度限制(PHP本质并没有二维数组) 但是:不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率。 #异形数组(不规则数组) 异形数组:数组中的元素不规则,有普通基本变量也有数组。 在实际开发中,并不常用,尽量让数组元素规则化(便于进行访问) */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#数组遍历 //数组遍历:普通数组数据的访问都是通过数组元素的下标来实现访问,如果说数组中所有的数据都需要依次输出出来,就需要我们使用到一些简化的规则来实现自动获取下标以及输出数组元素。 $arr = array(0=>array('name'=>'Tom'),1=>array('name'=>'jim')); //二维数组 //访问一维元素:$arr[一维下标] print_r($arr[0]); //结果:array'name'=>'Tom' ) //访问二维元素:$arr[一维下标][二维下标] echo $arr[1]['name'];//Jimu //在进行数据存储定义的时候,通常二维数组不会两个维度的key下标都为数字,一般是一维为数字(无意义),二维为字符串(数据库表字段),所以在进行遍历的时候,通常是只需要针对─维进行遍历,取得二维数组元素,然后二维数组元素通过下标去访问。 echo '<hr/>'; //一维数组历遍 foreach($a3 as $key => $value){ //foreach(数组 as [下标] => 值){} 下标可以留空 echo '下标:'.$key.',值:'.$value,'<br/>'; } unset($key,$value); //删除变量 //二维数组历遍 foreach($info as $value){ //foreach(数组 as [下标] => 值){} 下标可以留空 echo 'name:'.$value['name'].',age:'.$value['age'],'<br/>'; } unset($key,$value); //删除变量 echo '<hr/>'; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#foreach遍历原理 /* foreach遍历的原理:本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach,就是利用指针去获取数据,同时移动指针。 foreach(Sarr as $k => $v){ //循环体 } 1、foreach.会重置指针:让指针指向第一个元素 2、进入foreach.循环:通过指针取得当前第一个元素,然后将下标取出放到对应的下标变量sk中(如果存在),将值取出来放到对应的值变量sv中;(指针下移〉 3、进入到循环内部(循环体),开始执行﹔ 4、重复2和3,直到在2的时候遇到指针取不到内容(指针指向数组最后〉 */ |
1 2 3 4 5 6 7 8 9 10 11 12 |
#For循环遍历数组 /* For循环:基于已知边界条件(起始和结束〉然后有条件的变化(规律〉因此: for循环遍历数组有对应条件 1、获取数组长度:count(数组)得到数组元素的长度 2、要求数组元素的下标是规律的数字 */ $arr=array(1,2,3,4,5,6,8,94,33); for($i=0, $len=count($arr); $i < $len; $i++){ echo '下标:'.$i.' 值:'.$arr[$i],'<br/>'; } echo '<hr/>'; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#while循环历遍 $arr = array(1,'name'=>'小明',3,'age'=>25); while(list($key,$value) = func_new_each ($arr)){ echo '下标:'.$key.' 值:'.$value,'<br/>'; } //因为 PHP 7.2之后的版本弃用 each 所以使用自定义函数,以下代码来自互联网 function func_new_each(&$array){ $res = array(); $key = key($array); if($key !== null){ next($array); $res[1] = $res['value'] = $array[$key]; $res[0] = $res['key'] = $key; }else{ $res = false; } return $res; } |