1.数组基础
php的数组就是一些数据的有序排列的集合。它们的顺序不由下标来决定,而是由其“放入”顺序来决定。
可以设定整数数字下标,
也可以设定字符串下标,
还可以不设定下标,此时也可以称为“自动下标”:其实它是整数下标,其值为之前所用过的整数下标的最大值+1.
其他非常规情况的下标有自动转换能力:
7.7 -->7
true -->1
false -->0
2.数组取值:
就是用中括号,再使用下标。
2.数组的分类
按键值关系来分:索引数组,关联数组,混合数组;
按数组的维数(复杂程度)分:一维,二维。。。
本质上:其实,php(和js),数组只有一维!!!
所谓,二维,无非是指一个一维数组的每一项,又是一个一维数组!
所谓二维,只是在“形状”上跟其他语言的二维数组有点类似:多行多列的数据而已。
$a = array(
array(11,12, 13),
array(21,22,.23, 24, 25),
array(31,32, 33),
41, 42
);
$v1 = $a[0];
$v2 = $a[3];
3.数组的基本使用
4.数组的遍历
foreach($数组名 as 【$key =>】$value){
//循环体,这里可以处理数据:$key, $value
}
一个观念:一个数组内部,总是有一个指针用来只是“当前操作的单元”。
$v1 = current($a); //取得当单元的值;
$v2 = key($a); //取得当单元的键名;
$v3 = next($a); //取得下一个单元的值:先移动到下一个,然后取得其值;
$v4 = prev($a); //取得上一个单元的值;
$v5 = end($a); //取得最后一个单元的值;
$v6 = reset($a); //取得第一个单元的值;
$len = count($a);
for($i = 0; $i < $len; ++$i){
$key = key($a);
$value = current($a);
//这里可以处理数据:$key, $value
next($a);
}
可以将一个函数的一个单元的键和值都取得,并放入一个数组中,该数组形式类似这样:
$v1 = each($a);//则$v1为:
array(
1=>取得的值,
‘value’ =>取得的值,
0=>取得的键,
‘key’=>取得的键
)
list()“函数”的使用:可以将一个数组的从0开始的连续的数字下标的单元的值一次性取出来放入对应的多个变量中。
list($v1, $v2, $v3, .... ) = $数组;
其相当于如下语句而已:
$v1 = $数组[0];
$v2 = $数组[1];
$v3 = $数组[2];
........
while( list($key, $value) = each($要遍历的数组) ){
//这里可以处理数据:$key, $value
}
foreach($数组名 as 【$key =>】$value){
//循环体,这里可以处理数据:$key, $value
}
1,foreach也是正常的循环语法结构,可以有break和continue等操作。
2,遍历过程中值变量默认的传值方式是值传递。
3,遍历过程中值变量可以人为设定为引用传递:foreach($arr as $key => &$value){ ... }
4,foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环。
5,foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。
5.数组排序
一趟趟从左往右进行相邻单元的两两比较,凡是2个元素的顺序不是目标顺序,就将他们进行交换。
一趟趟从“现有剩余数据”中找出最大的单元,并每一趟之后将该单元,跟这一趟中的最后一个单元进行交换。
所谓查找算法,大体主要是解决这样一个问题:找出某个数组中,是否存在某个值(数据)。
就是遍历该数组,一个一个判断,如果相等,就表示有,然后退出就ok。
有个数组:
$a = array(11, 13, 1, 8, 9, 33, 34, 22, 14, 55, .......);
需求:
1,请找出该数组中是否有88?
2,请找出该数组中是否有33?
二分查找算法的前提:
1,针对的是索引数组;
2,针对的是已经排好序的数组;
有关二分查找算法的效率(性能)问题的一点说明:
1000个数据,约10次找出;
100万个数据,约20次找出;
10亿个数据,约30次找出
40亿个数据,约32次找出;