数组在之前我们让大家记住两个观点:
1. 数组可以存入多个不同类型的数据,是一个复合数据类型。
2. 数组的英文是array,学一下最简单的数组声明。
那我们来进行简单的回顾:
~~~
<?php
$shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');
echo '<pre>';
var_dump($shu);
echo '</pre>';
?>
~~~
在上例中,我们发现我们存入了:
1. 整型
2. 浮点
3. 布尔
4. 字符串
注:上例中echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰。
我们用var_dump()打印出来显示看一下效果:
![document/2015-08-24/55db00753ba71](http://box.kancloud.cn/document_2015-08-24_55db00753ba71.png)
我们仔细观察一下上面的这张图,你会发现以下几个特点:
1. array(size = 4) 说明里面有4个元素
2. 0 => int 1 我们知道int是整型的意思,1是一个整型的数值。那前面的0,1,2,3和=>代表什么意思呢?
3. 最新前的0,1,2,3代表的是值的读取标识号,我们称之为下标或者键(英文:key)
4. => 是一个符号标准叫法叫作:键值对应符。因此,以后再看到 0=> int 1 可以这样来说。 下标访问符0对应整型的1。
5. 我们还称数组里面的键值对为元素,元素就是键值对的组合。
哦耶! 数组好像还挺好学的,全是一些规律哟。
我们通过上例,其实你一不小心的就完成了数组其中的一种声明方式:索引数组的声明哟。
所谓索引数组:就是下标全为整型的数组。
### 索引数组的下标必须要从0开始吗?
答:这个问题其实不然,索引数组并不一定要从0开始。
那如何能够不从0开始呢?
答:需要用到大家在上面学的一小块知识哟。就是键值对应符。我们来动手写写。
~~~
<?php
$kele = array('只有不断努力才能博得未来',10 => 'NoAlike', 'PHP学院' , '去PHP学院去PHP', 19 => '凤姐和芙蓉我都爱' , '杨幂臭脚我最爱');
//打印显示$kele
echo '<pre>';
var_dump($kele);
echo '</pre>';
?>
~~~
上例中,我们一不小心就写了一个索引数组。不过索引数组的下标不是从0 开始的,而是从10开始的。
不过上面的例子中,我们觉得写的不优美,我们可以将代码写的更加优美一些,格式更加清晰一些。
~~~
<?php
$kele = array(
'只有不断努力才能博得未来',
10 => 'NoAlike',
'PHP学院' ,
'去PHP学院去PHP',
19 => '凤姐和芙蓉我都爱' ,
'杨幂臭脚我最爱'
);
//打印显示$kele
echo '<pre>';
var_dump($kele);
echo '</pre>';
?>
~~~
这样是不是看得更清楚,一行对应一个数组的值。
我们执行一下代码,看一下效果:
![document/2015-08-24/55db03f6c1ec2](http://box.kancloud.cn/document_2015-08-24_55db03f6c1ec2.png)
通过上面的效果,我们来总结规律:
1. 索引数组若不强制声明他的下标,他的下标是从0开始的。(我们的第一个数组的值:只有不断努力才能博得未来。这个值的下标为0)。
2. 如果我指定过下标他的下标就为我指定的值。如下标为10和下标为19的,都是我指定过的值。
3. 若某个值(如NoAlike),强制指定了下标(下标为10)。在它后面加上的值(PHP学院),不指定下标的话。他们的下标增长规律为最大值+1。
例如:凤姐和芙蓉我都爱的下标为19.我在后面加上了:杨幂臭脚我最爱。它的下标自动增长为了11。
不知不觉,你已经学会了索引数组的创建,神奇吧?真为你感到高兴!
###向索引数组中增加元素
学习完了索引数组的创建,接下来我们学习索引数组的**增加、修改和删除**。
~~~
<?php
$minren = array(
'杨幂',
'王珞丹',
'刘亦菲',
'黄圣依'
);
//如何向这$minren这个数组中增加元素呢
//猜猜范冰冰的下标是多少?
$minren[] = '范冰冰';
$minren[100] = '范爷';
//它的下标又为几呢?
$minren[] = '李晨';
?>
~~~
总结:
1. 向索引数组中增加元素用: 数组变量名[]、数组变量名[键值]这两种方式来增加元素
2. 键值的增长规则与之前的规则一样。都是最大值加1的原则。
###向索引数组中删除元素
我们还拿刚刚的数组来举例:
~~~
<?php
$minren = array(
'杨幂',
'王珞丹',
'刘亦菲',
'黄圣依',
'范冰冰'
);
//假设我不喜欢:黄圣依,如何将黄圣依给删掉掉呢?
//如果删除掉后范冰冰的下标为多少呢?
//如果在后面再追加一个元素,会填掉:“黄圣依”留下来的空吗?
unset($minren[3]);
$minren[] = '金星';
echo '<pre>';
var_dump($minren);
echo '</pre>';
?>
~~~
看看效果:
![document/2015-08-24/55db08d7b2c46](http://box.kancloud.cn/document_2015-08-24_55db08d7b2c46.png)
1. 使用unset删除变量的方式来删除数组里面的值。
2. 删除了中间的值,并不会让后面的下标向前自动移动。而是原来的值为多少就为多少
3. 删除掉其中的某个值,新加入的值不会替换掉原来的位置,依然遵循最大值加1的原则。
### 修改值
我们学习最简单的创造、增加和删除。我相信大家一定能够推理出如何修改值了。
~~~
<?php
$minren = array(
'杨幂',
'王珞丹',
'刘亦菲',
'黄圣依',
'范冰冰'
);
$minren[5] = '范爷';
$minren[2] = '亦菲,不要架给韩国人好吗?';
echo '<pre>';
var_dump($minren);
echo '</pre>';
?>
~~~
执行上面的代码,输出看看结果。
1.用变量名[键] = 新值。就把数组中的值定的值修改了。
### 索引数组的其他声明方式
通过上面的例子,我们学习到了数组的声明。我们来学一下数组的其他声明方式。
####一、直接用之前未声明的变量,用变量名后面接中括号的方式声明数组。
~~~
<?php
//直接写一个变量后面加上中括号,声明变量
$qi[] = '可口可乐';
$qi[10] ='百事';
echo '<pre>';
var_dump($qi);
echo '</pre>';
?>
~~~
####二、每次用array()写的太麻烦了,还可以不用写array哟,更简单。
~~~
<?php
$minren = [
'杨幂',
'王珞丹',
100 => '刘亦菲',
'黄圣依',
'范冰冰'
];
echo '<pre>';
var_dump($minren);
echo '</pre>';
?>
~~~
上面是另外两种PHP学院的写法。当然,你自己喜欢使用哪一种就使用哪一种来声明。
###关联数组
索引数组适当的变一下形就出现了关联数组。只要数组里面有一个为字符串的数组,就为关联数组。
通过上例中,我们发现数组的下标只能够为字符串,当然不能够满足我的需求。
假设我想声明一个下标为帅对应李文凯这个值。肯定不能满足我的需求。
那我们来声明一下关联数组。跟索引数组的声明方式完成一样。不过不同的是,必须要指定字符串的下标和必须要使用键值对应符。
~~~
<?php
//声明一下关联数组
$rela = array(
'帅' => '李文凯',
'很帅' => '黄晓明',
'灰常灰常帅' => '宁泽涛',
'有男人味的大叔' => '吴秀波',
);
//再来玩玩简洁声明
$drink = [
'美' => '凤姐',
'很美' => '芙蓉姐姐',
'verymei' => '杨幂',
'心中滴女神呀' => '华妃',
100 => '孙俪',
'娘娘',
];
// 输出 $rela
echo '<pre>';
var_dump($rela);
echo '</pre>';
// 输出$drink
echo '<pre>';
var_dump($drink);
echo '</pre>';
?>
~~~
我们来实验一下看看最终的结果是什么样的:
![document/2015-08-24/55db2e311602a](http://box.kancloud.cn/document_2015-08-24_55db2e311602a.png)
我们通过实验知道:
1. 声明关联数组是 键名 => 值
2. 在关联数组可以有索引数组的元素
3. 关联数组中的索引数组的元素后再声明了无下标的元素,依然是最大值+1原则。(观察上图中的值为孙俪、娘娘的两个元素)。
###关联数组的增、删、改
~~~
<?php
$drink = [
'美' => '凤姐',
'很美' => '芙蓉姐姐',
'verymei' => '杨幂',
'心中滴女神呀' => '华妃',
100 => '孙俪',
'娘娘',
];
//追加方式与索引数组是一样的
$drink['kx'] = '康熙';
//输出试试
echo '<pre>';
var_dump($drink);
echo '</pre>';
//删除一个试试
unset($drink['verymei']);
echo '<pre>';
var_dump($drink);
echo '</pre>';
//将芙蓉姐姐 改成:心里美才是真的美
$drink['很美'] = '心里美才是真的美';
echo '<pre>';
var_dump($drink);
echo '</pre>';
?>
~~~
你动手做做刚刚的实验,你会发现操作方式与索引的操作方式一样。只不过下标在读取的时候读取的下标PHP学院了。
####其他的关联数组声明方式
~~~
<?php
$drink['nf'] = '农夫山泉';
$cocacola = '可口可乐';
//当然可以是变量哟
$drink['kl'] = $cocacola;
$data = array(
'kl' => $cocacola,
);
?>
~~~
通过上例我们发现,在关联数组当中也是可以不用array,直接在变量后面接括号。括号里面插入字符串下标,一样也声明成功。
后面插入变量的例子,只不过把字符串变成了变量,当然没有问题。
###数组当中插入数组
数组可以插入整型、浮点、字符串,那么数组当中可不可以插入数组呢?
当然可以。
在学习数组的时候,我们定义了这样一组名词。
1. 一维数组 数组里面没有其他数组,只有单纯的一些变量或者值。
2. 二维数组 数组里面插入了单层的一个数组,或者多个数组
3. 三维数组 在数组(A)里面插入了一个数组(B),在B数组里面又插入了一层级的数组(C),这种我们就称为三维数组
4. 超过三维的,统统都叫多维数组。
注:索引数组和关联数组当中都可以再插入其他数组,让数组变为多维的。
我们来声明一个一维数组,只有一个维度。索引、关联均可,这个操作大家都很熟。
~~~
<?php
//一维的索引数组
$data = [1 , 2 , 3 , 4 , 10 => 250];
//一维的关联数组
$rela = [
'beijing' => '北京',
'shanghai' => '上海',
'tj' => '天津',
];
?>
echo '<pre>';
var_dump($rela);
echo '</pre>';
echo '<pre>';
var_dump($data);
echo '</pre>';
~~~
一维数组大家很熟悉,也不难,就是声明数组嘛。二维也不难,只是在数组里面再插一个或多个数组。二维学好了,多维就学好了。
~~~
<?php
$person = array(
'office' => '办公室',
//注意:插入第一个数组哟
'family' => array(
'爸爸',
'妈妈',
'yeye' => '爷爷',
'nn' => '奶奶',
),
//注意:又插入了一个平级的数组
'jiaotong' => array(
'自行车',
'摩托车',
'汽车',
'飞机',
),
);
echo '<pre>';
var_dump($person);
echo '</pre>';
?>
~~~
我们执行一下看看效果:
![document/2015-08-24/55db3444dce04](http://box.kancloud.cn/document_2015-08-24_55db3444dce04.png)
我们发现变量person 是一个数组类型。有三个元素(size=3)。
* 第一个元素为 office 对应的是一个字符串“办公室”,
* 第二个元素为family 里面是一个数组,这个数组又有4个元素,值分别为:爸爸、妈妈、爷爷、奶奶。
* 第三个元素为jiaotong,里面也为一个数组有4个元素,值分别为:自行车、摩托车、汽车、飞机。
好了,二维数组好声明,只要把格式写对了,确定是在一个数组里面再插入一个数组就好。
那如何访问:爷爷和爸爸这两个值呢?
~~~
<?php
$person = [
'office' => '办公室',
//注意:插入第一个数组哟
'family' => [
'爸爸',
'妈妈',
'yeye' => '爷爷',
'nn' => '奶奶',
],
//注意:又插入了一个平级的数组
'jiaotong' => [
'自行车',
'摩托车',
'汽车',
'飞机',
],
];
//访问“爸爸”这什值
echo $person['family'][0];
echo '<br />-----华丽丽的分割线------<br />';
//访问“爷爷”这什值
echo $person['family']['yeye'];
echo '<br />-----华丽丽的分割线------<br />';
//访问“汽车”这什值
echo $person['jiaotong'][2];
?>
~~~
我们看看结果如下:
![document/2015-08-24/55db36205b7be](http://box.kancloud.cn/document_2015-08-24_55db36205b7be.png)
上例大家会发现,访问二维数组不过是按照之前的下标读取方式依次向下读取即可。
> 先写上变量,中括号写上family这个下标,再写上要访问元素的下标。
三维数组我们说了概念,那我们直接上手实验看看效果:
~~~
<?php
$area = array(
'china' => array(
'上海',
'湖北',
'天津',
'北京' => array(
'hd' => '海淀',
'朝阳',
'房山',
'cp' => '昌平',
),
'广东' => array(
'深圳',
'广州',
'佛山',
'dg' => '东莞',
),
),
'usa' => array(
'华盛顿',
'旧金山',
'纽约' => array(
'曼哈顿区',
'皇后区',
'布鲁克林区',
),
),
);
echo '<pre>';
var_dump($area);
echo '</pre>';
?>
~~~
我们执行一下看看效果:
![document/2015-08-24/55db384da1c1c](http://box.kancloud.cn/document_2015-08-24_55db384da1c1c.png)
说明:
在变量$area下有二个数组,一个为china,一个为usa。
在china这个数组里面插入了上海、湖北、天津,又插入了北京和广东。而北京和广东又是一个数组。在北京和广东这两个数组里面分别有不同的元素。
在这usa 这个数组里面插美国的华盛顿、旧金山和纽约。而纽约下面又是一个数组,说明了纽约下面的几个区。
所以说,三维数组就是在数组里面再插入一个数组(A),在A数组里面插入一个数组。
我们接下来看看,如何来读取里面的值。
~~~
<?php
$area = array(
'china' => array(
'上海',
'湖北',
'天津',
'北京' => array(
'hd' => '海淀',
'朝阳',
'房山',
'cp' => '昌平',
),
'广东' => array(
'深圳',
'广州',
'佛山',
'dg' => '东莞',
),
),
'usa' => array(
'华盛顿',
'旧金山',
'纽约' => array(
'曼哈顿区',
'皇后区',
'布鲁克林区',
),
),
);
//读取华盛顿
echo $area['usa']['0'];
//读取:布鲁克林
echo $area['usa']['纽约'][2];
//读取:昌平
echo $area['china']['北京']['cp'];
//修改cp下标的值改为:西城区
$area['china']['北京']['cp'] = '西城区';
//输出看看原来昌平的值是否发生了变化
echo $area['china']['北京']['cp'];
?>
~~~
通过上面我们发现数组学习起来不难。
* * * * *
学习多维数组的难点:
注意格式,将每个维度的换行、缩进弄整齐。就不容易出错了。
【切记】
数组元素间的分割符为逗号,在数组中插入数组的时候,不要在结尾处写成了分号(;)
下图是错误的载图展示:
![document/2015-08-24/55db3a3175e6c](http://box.kancloud.cn/document_2015-08-24_55db3a3175e6c.png)
- 01. 为什么选择本书学习PHP
- 1.1 为什么学习PHP?
- 1.2 PHP是什么
- 1.3 零基础也能学习
- 1.4 为什么有些人学不会
- 02.PHP的环境安装
- 2.1开发环境是什么?
- 2.2 windows环境安装
- 2.3 Linux环境安装
- 2.4 其他开发环境
- 2.5 写代码的工具选择
- 03. PHP基本语法
- 3.1 PHP基本语法
- 3.1.1 写出你的第一段PHP代码
- 3.1.2 读过初中你就会变量
- 3.1.3 echo 显示命令
- 3.1.4 注释的功能很强大
- 3.2 数据类型并不神秘
- 3.2.1 整型就是整数
- 3.2.2 布尔就是易经的知识
- 3.2.3 字符串
- 3.2.4 浮点型
- 3.2.5 重要:if和else语法
- 3.2.6 NULL类型
- 3.2.7对象以后会学
- 3.2.8 数组会有单纯的一个章节
- 3.2.9 资源类型
- 3.2.10 眼前了解回调类型即可
- 3.2.11 查看和判断数据类型
- 3.2.12 数据类型的自动转换和强制转换
- 3.3 常量和变量
- 3.3.1 用常量限制用户跳过某些文件
- 3.3.2 可变变量
- 3.3.3 外部变量
- 3.3.4 环境变量
- 3.3.5 变量引用
- 3.4 PHP表达式与运算符
- 3.4.1 算术运算
- 3.4.2 赋值运算
- 3.4.3 自加、自减运算
- 3.4.4 比较运算
- 3.4.5 逻辑运算
- 3.4.6 位运算
- 3.4.7 运算符优先级
- 3.4.8 三元运算符和其它运算符
- 04. PHP中的流程控制
- 4.1 if条件结构流程
- 4.1.1 if语句
- 4.1.2 嵌套if...else...elseif结构
- 4.1.3 if语句多种嵌套
- 4.2 分支结构switch语句的使用
- 4.3 循环语句的使用
- 4.3.1 while循环
- 4.3.2 do...while循环的区别
- 4.3.3 for循环控制语句
- 4.3.4 goto语法
- 4.3.5 declare 语法
- 05.PHP的函数基本语法
- 5.1 自定义函数
- 5.2 自定义函数高级调用
- 5.2.1 回调函数
- 5.2.2 变量函数
- 5.2.3 匿名函数
- 5.2.4 内部函数
- 5.2.5 变量作用域
- 5.2.6 参数的引用
- 5.2.7 递归函数
- 5.2.8 静态变量
- 5.3 使用系统内置函数
- 5.4 文件包含函数
- 5.5 数学常用函数
- 5.6 日期常用函数
- 5.6.1 获取时期时间信息函数
- 5.6.2 日期验证函数
- 5.6.3 获取本地化时间戳函数
- 5.6.4 程序执行时间检测
- 5.7 字符串常用函数
- 06.PHP数组与数据结构
- 6.1 数组的定义
- 6.2 数组的操作
- 6.2.1 数组的计算
- 6.2.2 for循环遍历索引数组
- 6.2.3 foreach遍历关联数组
- 6.2.4 list、each函数遍历数组
- 6.2.5 常用操作数组函数
- 6.3 数组的常用函数
- 07. PHP中的正则达达式
- 7.1 正则表达示的定界符
- 7.2 正则表达示中的原子
- 7.3 正则表示中的元字符
- 7.4 正则达达示中的模式修正符
- 7.5 写正则的诀窍和常用正则
- 7.6 用正则写一个UBB文本编辑器
- 08.文件系统
- 8.1 读取文件
- 8.2 创建和修改文件内容
- 8.3 创建临时文件
- 8.4 移动、拷贝和删除文件
- 8.5 检测文件属性函数
- 8.6 文件常用函数和常量
- 8.7 文件锁处机制
- 8.8 目录处理函数
- 8.9 文件权限设置
- 8.10文件路径函数
- 8.11 小小文件留言本
- 8.12 修改配置文件的实例
- 09.PHP文件上传
- 9.1 文件上传需要注意php.ini文件
- 9.2 文件上传的步骤
- 9.3 文件上传表单注意事项
- 9.4 按照数组和步骤完成文件上传
- 9.5 多文件上传
- 9.6 文件上传进度处理
- 10.PHP图像处理
- 10.1 学习前的准备工作
- 10.2 用图片处理函数画一张图
- 10.3 生成验证码
- 10.4 图像缩放和裁剪技术
- 10.5 图片水印处理
- 11.错误处理
- 11.1 禁止显示错误
- 11.2 错误报告级别
- 11.3 错误记录日志
- 11.4 自定义错误处理函数
- 12.MySQL 入门
- 12.1 请进入《MySQL入门》
- 13. PHP操作mysql数据库
- 13.1 数据库连接步骤
- 13.2 通过步骤做一个用户注册
- 13.3 通过步骤做一个列表显示
- 13.4 把用户做个分页
- 13.5 批量和指定删除用户
- 13.6 修改用户信息
- 13.7 数据显示乱码终极解决办法
- 14.会话管理和控制
- 14.1 Cookie概述
- 14.2PHP中的Cookie
- 14.3 session概述
- 14.4 PHP中使用session
- 14.5 SESSION应用实例
- 15.通过cURL来做小偷程序
- 15.1 curl的使用步骤
- 15.2 自定义get方法抓取网页
- 15.3 使用post发送数据
- 16. 用PHP写一个论坛
- 16.1 web2.0始于论坛
- 16.2 需求:开发前你要知道他的样子
- 16.3 核心业务流程
- 16.3.1 用户注册流程
- 16.3.2 普通用户和管理员登陆流程
- 16.3.3 发贴流程
- 16.3.4 回复流程
- 16.3.5 版块管理流程
- 16.3.6 版主业务流程
- 16.3.7 金币奖励和消耗流程
- 16.4 数据库表设计
- 16.5 文件和代码规范
- 16.6 核心功能说明
- 16.6.1 项目目录结构说明
- 16.6.2 公共文件的使用
- 16.6.3 模板引擎讲解
- 16.6.4 用户注册、登陆功能讲解
- 16.6.5 发帖功能讲解
- 16.6.6 回帖功能讲解
- 16.6.7 项目安装模块讲解
- 附录1. 版权声明
- 附录2 . 学习PHP常用的英文单词