如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
初识数组
数组就是由键值对组成的语言结构
声明数组
- #arr = array(1,1,2,3,4,5)
- $arr = []
- $arr[]=”//取值时用到
数组分类
- 索引数组
下标由数字组成,默认从零开始
1 2 |
$arr2 = array(1,2,3,4,5,6);//索引数组,key从零开始 |
- 关联数组
下标由字符串组成
1 2 |
$arr3 = array('key1'=>'f','key2'=>'dd','key3'=>'f');//关联数组 |
3.混合数组
1和2的混合使用
1 2 |
$arr1 = array(1,'aa','sd',33,'ds'); |
数组的特性
- 下标只能是整形或字符串
- 包含有合法整形值的字符串会被自动转化成整形 ‘1’ 转换成 整型1 ,’08’ 不会被转换
- 浮点数会自动舍余取整(覆盖0/1)
- 布尔值也会被转化成整形
- null也会被转化为空字符串
- array()和object不能最为键名
- 索引数组的下标是从当前最大下标+1,出现同名下标,后者覆盖前者
- 关联数组出现重名也会被覆盖
增加/修改元素
1 2 3 4 5 6 7 8 9 10 11 |
$arr3[2]='ds'; $arr1 = array( 'name'=>array('xx','xxx','xxxx'), 'age'=>array('11','23','25') ); $arr1['sex']=''; $arr1['name'][3]='xxxx'; |
遍历数组
- for()
需要使用count(),只能用于连续键的索引数组
1 2 3 4 |
for($a = 1;$a<count($数组);$a++){ echo ..... } |
- while()
需要使用list each
list() //只能使用索引数组 ,从下标为0的开始 必须是连续的索引数组
each() 返回数组中当前的键/值对并将数组指针向前移动一步在执行
each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset() 。0对应是键,1对应的是值
1 2 3 4 |
while(list($key,$value)=each($arr1)){ echo ... } |
- foreach()
每次循环会把$数组里面的键赋值给$key,值赋给$value… (key value 可随意取名)
- foreach($数组 as $key=>$value){}
- foreach($数组 as $value){}
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 31 32 33 |
$arr1 = array( 'name'=>array('xx','xxx','xxxx'), 'age'=>array(18,12,13), 'sex'=>array('man','man','woman'), ); echo "<table border='1'width='800'>"; echo "<caption>标题</caption>"; echo "<tr><td>姓名</td><td>年龄</td><td>性别</td></tr>"; foreach($arr1 as $value){ echo"<tr>"; foreach($value as $val){ echo "<td>$val</td>"; } echo"</tr>"; } echo "</table>"; echo "<hr/>"; echo "<table border='1'width='800'>"; echo "<caption>标题</caption>"; echo "<tr><td>姓名</td><td>年龄</td><td>性别</td></tr>"; foreach($arr1 as $key=>$value){ echo "<tr>"; echo "<td>" .$value[0]."</td>"; echo "<td>" .$value[1]."</td>"; echo "<td>" .$value[2]."</td>"; echo "</tr>"; } echo "</table>"; |
与数组有关的函数
- range 填充数组
使用函数来填充数组
range(); //生成一个指定范围的数组
参1:序列的第一个值。
参2:序列结束于 limit 的值。
参3:如果给出了 step 的值,它将被作为单元之间的步进值。step 应该为正值。如果未指定,step 则默认为 1。
1 2 3 4 5 6 7 |
$arr = range(1,9,3);// 1 4 7 //最小值1开始,最大值9,步长3 echo "<pre>"; var_dump($arr); |
- array_fill() 填充数组
array_fill();
参1:开始的索引值
参2:填充的数量
参3:填充的值
1 2 3 4 5 6 7 8 9 10 11 |
<br />$arr2 = array_fill(2,3,'hello'); array(3) { [2]=> string(5) "hello" [3]=> string(5) "hello" [4]=> string(5) "hello" } |
- array_push 后部添加
array_push 将一个多个单元压入数组的末尾 一般用索引数组插入
参1: 被插入的数组
参2: 要插入的单元
返回值:一个新的数组长度
1 2 |
array_push($arr1,'hh','aa','zz');//索引数组,键值由数组中最大键值决定 |
- array_unshift 前部添加
array_unshift//头部添加
参1: 被插入的数组
参2: 要插入的单元
返回值:一个新的数组长度
1 2 3 4 |
array_unshift($arr1,'qq','ww','rr','tt');//索引数组,键值从零开始 |
- array_pop 后部移除
1 2 3 |
array_pop(数组名) 尾部移除 array_pop($arr1);//从尾部删除,一个删除一个 |
- array_shift 前部移除
1 2 3 |
array_shift(数组名) 头部移除 array_shift($arr1);//从头部开始删除,一个删除一个 |
- count() 统计数组的长度
1 2 3 4 |
for($i = 0; $i < count($arr); $i++){ echo '第' . $i . '次循环' . $arr[$i] ."<br>"; } |
- reset 重置
reset($arr); 重置数组的下标归零