php笔记7-数组

1.数组基础

php的数组就是一些数据的有序排列的集合。它们的顺序不由下标来决定,而是由其“放入”顺序来决定。

1.数组定义(赋值):

可以设定整数数字下标,

也可以设定字符串下标,

还可以不设定下标,此时也可以称为“自动下标”:其实它是整数下标,其值为之前所用过的整数下标的最大值+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基本语法

foreach($数组名   as   $key =>$value){

//循环体,这里可以处理数据:$key, $value

}

数组的指针操作及遍历原理:

一个观念:一个数组内部,总是有一个指针用来只是“当前操作的单元”。

$v1 = current($a); //取得当单元的值;

$v2 = key($a); //取得当单元的键名;

$v3 = next($a); //取得下一个单元的值:先移动到下一个,然后取得其值;

$v4 = prev($a); //取得上一个单元的值;

$v5 = end($a); //取得最后一个单元的值;

$v6 = reset($a); //取得第一个单元的值;

使用fornext遍历数组

$len = count($a);

for($i = 0; $i < $len; ++$i){

$key = key($a);

$value = current($a);

//这里可以处理数据:$key, $value

next($a);

}

each()函数的使用

可以将一个函数的一个单元的键和值都取得,并放入一个数组中,该数组形式类似这样:

$v1 =  each($a)//$v1为:

array(

1=>取得的值,

‘value’ =>取得的值,

0=>取得的键,

‘key’=>取得的键

)

list()“函数”的使用:可以将一个数组的从0开始的连续的数字下标的单元的值一次性取出来放入对应的多个变量中。

list($v1, $v2, $v3, .... ) = $数组;

其相当于如下语句而已:

$v1 = $数组[0];

$v2 = $数组[1];

$v3 = $数组[2];

........

while+each()+list()遍历数组

while( list($key, $value) = each($要遍历的数组) ){

//这里可以处理数据:$key, $value

}

数组变量的一些细节

foreach($数组名   as   $key =>$value){

//循环体,这里可以处理数据:$key, $value

}

 

1foreach也是正常的循环语法结构,可以有breakcontinue等操作。

2,遍历过程中值变量默认的传值方式是值传递。

3,遍历过程中值变量可以人为设定为引用传递:foreach($arr as $key => &$value){ ... }

4foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环。

5foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。

5.数组排序

排序函数简单演示(应用级别):

冒泡排序算法

一趟趟从左往右进行相邻单元的两两比较,凡是2个元素的顺序不是目标顺序,就将他们进行交换。

选择排序:

一趟趟从“现有剩余数据”中找出最大的单元,并每一趟之后将该单元,跟这一趟中的最后一个单元进行交换。

 

  6.数组的查找算法

   所谓查找算法,大体主要是解决这样一个问题:找出某个数组中,是否存在某个值(数据)。

   顺序查找

就是遍历该数组,一个一个判断,如果相等,就表示有,然后退出就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次找出;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值