数组基础
含义:数组就是系列数据的集合体,他们按设定的顺序排列成一个链的形状”,php中的数组下标可以不是连续的。
定义:(赋值)
$arr1 = array(2,34,5,6,7); // 最常见的数组形式,下标为默认下标,就是从0开始的整数
$arr2 = array("a"=>3,"bb"=>11,"cc23"=>6); // 关联数组,下标为字符串,常见
$arr3 = array(1=>3,10=>11,3=>5,0=>8); // 下标可以人为给定
$arr4 = array(1=>3,"a1"=>4,5=>5,"mn"=>18,88=>3); // 下标可以数字和字符串混用
$arr5 = array(5=>3,11,3=>5,"mn"=>18); // 有指定下标,也有自动下标,此时下标为“前面最大数字”下标+1
$arr6 = array(5=>3,7.7=>11,3=>5,"mn"=>18,2); // 此时下标为5,7,3,"mn",8
$arr7 = array(5=>4,true=>11,false=>6,"mn"=>45,3); // 此时下标为5,1,0,"mn",6
$arr8 = array(1=>4,3=>33,true=>11); // 此时下标为1,3对应额值为11,33,下标如果有重复,后面的值会覆盖前面的值
$arr9 = array(1=>2,-3=>33,11,); // 此时下标为:1,-3,2,注意最后一个逗号可以有
其他一些形式:
$arr10[] = 3;
$arr10[] = 11;
$arr10[] = 5; // 此时数组下标为0,1,2
$arr11['a'] = 3;
$arr11['b'] = 5;
$arr11['cd'] = 6; // 此时下标为'a','b','cd'
$arr12[1] = 3; // 下标为1
$arr12[] = 5; // 下标为2
$arr11['cd'] = 6; // 下标为'cd'
数组取值:通过数组下标取值,总体上可以将数组的单元的值,看成变量的取值一样
数组分类:
- 索引数组:通常认为:如果一个数组的下标是严格按照从0开始的连续的整数作为下标,则称其为索引数组
- 关联数组:通常认为,如果一个数组的下标,下标都是“字符串”并一定程度上表明了该单元的“含义”,则称其为关联数组
- 混合数组:既有数字下标,也有字符下标
特别注意:php中,数组单元的顺序,是由其“放入”顺序决定,而不是下标
数组的维数(复杂程度)分:
一维数组:
二维数组:
多维数组:
each()函数的使用
- 作用,先取得一个数组的“当前单元”的下标和值(并放入一个数组中,然后将指针移到下一个单元,可见该函数的返回值为一个数组
list()“函数”的使用
作用:用于取得一个数组中从0开始的数字下标的多个单元的值!
形式:
list( 变量1, 变量2, 变量3...)= 数组;如:
$arr = array(2=>4,1=>5,0=>2); list($v1) = $arr; // v1值为2 list($v1,$v2,$v3) = $arr; // v1,v2,v3值分别为:2,5,4
数组的指针操作:(数组内部有一种指针)
数组的有关单元的操作,如果没有指定下标,则就是针对该指针指向的单元的操作,则数组,作为一个“总体数据单位“,有如下指针操作函数可以使用:
$v1 = current($数组); // 获得数组的当前指针指向单元的“值” $v2 = key($数组); // 获得数组的当前指针指向单元的“键”(下标) $v3 = next($数组); // 先将数组的指针移向下(后)一个单元,然后获得该新指向的单元的“值” $v4 = prev($数组); // 先将数组的指针移向上(前)一个单元,然后获得该新指向的单元的“值” $v5 = end($数组); // 先将数组的指针移向最后一个单元,然后获得该新指向的单元的“值” $v6 = reset($数组); // 先将数组的指针移向第一个单元,然后获得该新指向的单元的“值”
数组的遍历:
foreach遍历数组:
形式:
foreach($数组变量名 as 【$key=>】 $value){ // 循环体,这里可以去“使用”$key和$value // $key 和 $value就是该遍历语句一次次取得的数组的每一个单元(项)的下标和对应值 // 而且,它总是从数组开头往后按顺序取数据 }
使用for和next()遍历数组:
对php数组,往往不能单纯使用for循环进行遍历,或者说php中使用for循环只能遍历“数组下标从0开始的连续整数”(索引数组)的数组
如:
$arr = array(1=>2,"df"=>5,6=>5); for($il;i<count($arr)l$i++){ $key = key($arr); $value = next($arr); echo "$key => $value"; }
while+each()+list()遍历数组
形式: 几乎是模式化的语法,如
while(list($key,$value) = each($arr)){ // 这里可以处理key和value了 }
数组遍历的细节探讨
遍历过程中值变量默认的传值方式是值传递,也可以人为指定引用传递(值变量可以引用传递,键变量不能使用引用传递)
如:
// 不能再key前加& foreach($arr as $key => & $value){ }
foreach默认是原数组上进行遍历,即遍历后会改变数组内部指针指向,但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历,(遍历的是副本,改变的是原数组)
- foreach中如果值变量是引用传递,则无论如何都是在原数组上进行操作(遍历,修改)
数组相关函数
- 指针操作函数:current(),key(),next(),prev(),end(),reset()
- 数组排序函数:sort(),asort(),…(参考手册)
- 数组查找函数:in_array(),array_key_exists,array_search
- 单元操作函数:array_pop,array_push,…
- 其他函数:count(),array_reverse,array_merge(),…
数组排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序