php数组 day6 (2019.4.11)

一、数组入门

可以使用数组保存相关的信息。如:学生的基本信息。

1.数组概念

数组是内存中一块连续的空间(堆区)。用来保存不同类型的数组。数组没有长度限制。
数组由元素(element)组成。元素由键值对(key -value)组成。
每个元素会有下标,我们成为键(key);
元素有值(value)

2.数组分类

1)索引数组

indexed 数组的索引值为整数,一般以0开始,通过为止表示数据是用索引数组。

2)关联数组

associative 数组以字符串作为索引值。

3.创建数组的三种方式

1)直接赋值方式创建

image.png

2)array创建

image.png

3) 使用[]快捷方式定义数组。(>=PHP5.3.0)

image.png

4.数组特点

1)索引数组

下标时一个索引,指示元素在数组中的位置,不表示对应值的含义,下标为整形。省略下标时自动从0开始分配,自动增长,部分元素省略下标时,在原来下标的最大值基础上增长。


image.png

2)关联数组

下标为字符串,一般表示元素的意义,定义时下标用””包括


image.png

5.多维数组

当一个数组中的值,还是一个数组时,称为多维数组(几层就是几维)。


image.png

用array语法声明一个多维数组。


image.png

一、 数组遍历

1.使用数组的内部指针控制函数遍历数组

1) 内部指针说明

由于数组是由多个数据集合而成,当程序需要运算处理的时,当读取某个索引位置的数据内容是,会由数组之中内置的指针,指向目标数据,供程序读取。

QQ截图20190411102640.jpg

2) 数组指针控制的相关函数。

current() 返回数组中当前指针指向的元素值。

key() 返回数组中当前指针所指向的元素键。


image.png

next() 将数组中的指针向前移动一位。
prev() 将数组中的指针向前倒回一位。
reset() 将数组中的指针指向第一位。
end() 将数组中的指针指向最后一位。


image.png

3)do....while循环遍历数组

image.png

2. 联合使用list( )、each( )和while循环遍历数组

1)each()

返回数组中当前指针位置的键值对。并向前移动数组指针。
键值对被返回成四个单元的数组,键名 0 1 key value
0 key 包含数组单元的键名
1 value 包含有数据。
如果内部指针越过了数组的末端,
each 返回false;

image.png

2)list

不是函数,是语言结构。
list()把数组中的值赋给一组变量。
注意:list()用于数字索引的数组,并且数字索引从0开始。


image.png

3)list()、each( )和while循环遍历数组

image.png

image.png

3.使用for语句循环遍历数组

image.png

4.使用foreach语句遍历数组

格式如下
foreach(被遍历的数组 as [键=>] 值){
.....
}
在循环的时候[当前单元的键会被赋值给键],当前单元的值会被付给 值。并且指针会向前移动一位。


image.png

image.png

注意:foreach 所操作的数组,是指定的数组的拷贝。不是数组本身。

三、超全局数组:

1)服务器变量

_SERVER_SERVER[‘HTTP_REFERER’]; 上一个页面的URL地址
来源

image.png

["SERVER_NAME"]=>
string(15) "www.default.com" 服务器主机名
["SERVER_ADDR"]=>
string(9) "127.0.0.1" 服务器ip地址
["SERVER_PORT"]=>
string(2) "80" 服务器端口号
["REMOTE_ADDR"]=>
string(9) "127.0.0.1" 客户端IP
["DOCUMENT_ROOT"]=>
string(23) "C:/wamp/Apache24/htdocs"
服务器WEB根目录
["REQUEST_URI"]=> URL地址。
string(25) "/quanzhan01/lesson7/3.php"

2)HTTP GET变量

3)HTTP POST变量

四、数组常用函数

1.max(),min(),count(),

image.png

2.range(),array_merge(),array_rand(),shuffle

1)range(起始值,结束值):

返回位于起始元素和终止元素之间形成的新数组。


image.png

image.png

image.png

2)array_merge()数组合并

image.png

数组合并下标冲突解决规则:
字符串下标,后面的元素覆盖前面的元素。
整数下标,重新建立下标索引


image.png

3)array_rand(数组,随机取出元素的个数)

随机取出数组内元素,返回随机数组的下标
如果随机取出一个,返回下标。
如果取出多个,返回下标数组。


image.png

4)shuffle(数组):打乱数组

打乱成功返回true, 打乱失败返回false.


image.png

5)例题:生成验证码字符串

image.png

3.is_array():判断变量是否是数组类型

image.png

4.键值相关函数

1)array_keys()

返回数组中元素的键名组成的数组。


image.png

2)array_values()

返回数组中所有元素的值组成的数组。


image.png

3)array_combine(键数组,值数组)

创建一个数组,用键数组的值作为键名。
值数组的值作为值。


image.png

4)in_array(查找的值,数组)

查找数组中是否包含某个值。


image.png

5)array_key_exists(键,数组);

image.png

6)array_search()

在数组中搜索给定的值, 如果成功返回相应的键名,如果找不到,返回false;


image.png

7)array_flip() 键值反转

翻转数组中所有的键以及他们关联的值。


image.png

array_flip()函数返回一个反转后的的数组,如果同一个值出现了多次,最后一个键名将作为它的值,其他的键名将消失。(可用于数组去重)。


image.png

5.array_push,array_pop,array_shift(),array_unshift()

array_push(数组,元素)
在数组的末尾添加元素。
array_pop(数组)。
弹出数组末尾的元素。


image.png

array_shift();将数组的第一个元素移除。
array_unshift();在数组的开头插入一个元素。


image.png

用数组实现队列(先进先出)
array_push() 入队
array_shift() 出队。
数组实现栈(后进先出,子弹夹)
array_push() 入栈

array_pop() 出栈

6.array_reverse

以相反的顺序返回数组。


image.png

7.数组排序函数sort,rsort,asort,arsort,ksort

sort()
对数组进行升序排序,重建数字索引,不保持原来的键值关联关系。


image.png

rsort():
按值进行降序排列,不保持原来的键值关联关系。


image.png

asort():
对数组进行升序排序,保持键值关联。
image.png

arsort():
对数组进行降序排序,保持键值关联。


image.png

ksort():
按键进行升序排列;
image.png

krsort():
按键进行降序排列;
image.png

natsort():
自然排序。
image.png

usort():自定义排序

在第一个参数,小于,等于或者大于第二个参数时,该比较函数必须相应的返回一个,小于,等于,或者大于0的数。


image.png

8.数组去重array_unique()

image.png

9.数组的案例

斗地主 随机发牌 自动生成54张牌,随机分配出底牌和每个人的牌。


image.png

image.png

五、数组相关算法

1.数组排序相关算法

1)冒泡排序

要求,将较大的元素放在数组的末尾。
每趟循环中,通过两两对比,将较大的元素放在右侧。
原始数组 5 4 3 2
一趟冒泡 4 3 2 5
二趟冒泡 3 2 4 5
三趟冒泡 2 3 4 5


image.png

2.数组查找算法

1)顺序查找

image.png

2)二分法查找

array= [1,3,5,7,9,12,16]; 折半查找。 要求:必须数组是排好序的。 查找速度比较快 先定义两个边界start end =count(arr)-1;
将中间位置(mid= (start+end)/2)的值。和要查找的值进行比较。
如果两者相等,则查找成功。
如果查找的值大于中间的值,则查找的值一定在数组中间的右边。
只需要把start =mid+1 如果查找的值小于中间的值,则查找的值一定在数组中间的左边。end = mid-1
循环查找
运行到最后一共会出现两种结果
一种:查找到要查的值。
二种:查不到对应的值。 start >end
若果说mid 得到的是小数,使用round函数四舍五入。

image.png

image.png

image.png

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容

  • 一、数组定义 array() 1、索引数组 在一个变量中,存储一个或多个值。数组中的每一个元素都有一个访问ID,根...
    竹与豆阅读 531评论 0 0
  • 一、 数组入门 可以使用数组保存相关的信息。如:学生的基本信息。 1.数组概念 数组是内存中一块连续的空间(堆区)...
    致自己_cb38阅读 313评论 0 0
  • 数组的概述 PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方...
    dptms阅读 1,614评论 0 4
  • # 数组部分 # 1.## array_chunk($arr, $size [, $preserve_key = ...
    clothTiger阅读 1,173评论 0 1
  • php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uni...
    思梦PHP阅读 1,986评论 1 24