1.前言
- 数组能够在单独的变量名中存储一个或多个值。
<?php
$cars=array("Volvo","BMW","SAAB");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>
- 数组可以存入多个不同类型的数据,是一个复合数据类型。
<?php
//整型,浮点,布尔,字符串
$arr = array(1 , 1.5 , true ,'小鸡炖蘑菇');
var_dump($arr);
?>
在 PHP 中,有三种数组类型:
- 索引数组 - 带有数字索引的数组
- 关联数组 - 带有指定键的数组
- 多维数组 - 包含一个或多个数组的数组
2.索引数组
有两种创建索引数组的方法:
索引是自动分配的(索引从 0 开始)
<?php //整型,浮点,布尔,字符串 $arr = array(1 , 1.5 , true ,'小鸡炖蘑菇'); var_dump($arr); ?>
运行结果:
手动分配索引(索引可以不从0开始)
<?php $test = array( 5 => '只有不断努力才能博得未来', 10 => 'NoAlike', 'PHP学院' , 'learn php', 19 => '赵子龙' , '荆轲刺秦王' ); var_dump($test); ?>
运行结果:
注意:- 索引数组若不强制声明他的下标,他的下标是从0开始的。
- 如果指定过下标他的下标就为指定的值。如下标为10和下标为19。
- 若某个值强制指定了下标(下标为10)。在它后面加上的值(PHP学院),不指定下标的话。他们的下标增长规律为最大值+1。
2.1.向索引数组中增加元素
<?php
$minren = array(
'赵云',
'魏延',
'黄忠',
'马超'
);
$minren[] = '刘玄德';
$minren[100] = '张飞';
$minren[] = '关羽';
var_dump($minren)
?>
运行结果:
总结:
1. 向索引数组中增加元素用: 数组变量名[]、数组变量名[键值]这两种方式来增加元素
2. 键值的增长规则与之前的规则一样。都是最大值加1的原则。
2.2.从索引数组中删除元素
<?php
$minren = array(
'赵云',
'魏延',
'黄忠',
'马超',
'关羽'
);
unset($minren[3]);//删除马超
$minren[] = '张飞';//增加张飞
var_dump($minren)
?>
运行结果:
总结:
1. 使用unset删除变量的方式来删除数组里面的值。
2. 删除了中间的值,并不会让后面的下标向前自动移动。而是原来的值为多少就为多少
3. 删除掉其中的某个值,新加入的值不会替换掉原来的位置,依然遵循最大值加1的原则。
2.3.从索引数组中修改元素
<?php
$minren = [
'赵云',
'魏延',
'黄忠',
'马超',
'关羽'
];
$minren[2] = '黄忠怒斩夏侯渊';
var_dump($minren)
?>
用变量名[键] = 新值。就把数组中的指定的值修改了。
3. 关联数组
<?php
//声明关联数组
$rela = array(
'帅' => '霍建华',
'很帅' => '黄晓明',
'灰常灰常帅' => '胡歌',
'有男人味的大叔' => '吴秀波',
);
//简洁声明
$drink = [
'美' => '刘亦菲',
'很美' => '杨幂',
'非常美' => '刘诗诗',
'女神呀' => '黄蓉',
100 => '蓉儿',
'蓉妹妹',
];
var_dump($rela);
var_dump($drink);
?>
运行结果:
总结:
1. 声明关联数组是 键名 => 值
2. 在关联数组可以有索引数组的元素
3. 关联数组中的索引数组的元素后再声明了无下标的元素,依然是最大值+1原则。
3.1 关联数组增、删、改
<?php
$drink = [
'美' => '刘亦菲',
'很美' => '杨幂',
'非常美' => '刘诗诗',
'女神呀' => '黄蓉',
100 => '蓉儿',
'蓉妹妹',
];
$drink['美女'] = '我的黄蓉啊';//增加元素
var_dump($drink);
unset($drink['很美']);//删除元素
var_dump($drink);
$drink['非常美'] = '大幂幂';//修改元素
var_dump($drink);
?>
运行结果
4.多维数组
- 一维数组 数组里面没有其他数组,只有单纯的一些变量或者值。
- 二维数组 数组里面插入了单层的一个数组,或者多个数组。
- 三维数组 在数组(A)里面插入了一个数组(B),在B数组里面又插入了一层级的数组(C),这种我们就称为三维数组。
- 超过三维的,统统都叫多维数组。
二维数组
<?php
$person = array(
'office' => '办公室',
'family' => array(
'爸爸',
'妈妈',
'yeye' => '爷爷',
'nn' => '奶奶',
),
'transport' => array(
'自行车',
'摩托车',
'汽车',
'飞机',
),
);
var_dump($person);
echo $person['family'][0];//访问“爸爸”
echo $person['family']['yeye'];//访问“爷爷”
echo $person['transport'][2];//访问“汽车”
?>
三维数组
<?php
$area = array(
'china' => array(
'上海',
'湖北',
'天津',
'北京' => array(
'hd' => '海淀',
'朝阳',
'房山',
'cp' => '昌平',
),
'广东' => array(
'深圳',
'广州',
'佛山',
'dg' => '东莞',
),
),
'usa' => array(
'华盛顿',
'旧金山',
'纽约' => array(
'曼哈顿区',
'皇后区',
'布鲁克林区',
),
),
);
var_dump($area);
echo $area['usa']['0'];//读取华盛顿
echo $area['usa']['纽约'][2];//读取:布鲁克林
echo $area['china']['北京']['cp'];//读取:昌平
$area['china']['北京']['cp'] = '西城区';//修改cp下标的值改为:西城区
echo $area['china']['北京']['cp'];//输出看看原来昌平的值是否发生了变化
?>
说明
在变量$area下有二个数组,一个为china,一个为usa。在china这个数组里面插入了上海、湖北、天津,又插入了北京和广东。而北京和广东又是一个数组。在北京和广东这两个数组里面分别有不同的元素。
在这usa 这个数组里面插美国的华盛顿、旧金山和纽约。而纽约下面又是一个数组,说明了纽约下面的几个区。
所以说,三维数组就是在数组里面再插入一个数组(A),在A数组里面插入一个数组。
5.数组的操作-遍历数组
for循环遍历数组
<?php
// 1.遍历下标连续的索引数组
$cars=array("Volvo","BMW","SAAB");
for($x=0;$x<count($cars);$x++) {//count() 函数用于返回数组的长度(元素数)
echo $cars[$x];
echo "<br>";
}
?>
foreach遍历数组
<?php
//遍历关联数组
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
foreach($age as $x=>$x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
// 遍历下标连续的索引数组
$data = array(1,2,3,4,5,6,7,8,9,10);
foreach($data as $k => $v){
echo $k . '------' . $v .'<br />';
}
// 遍历下标不连续的索引数组
$data = array(1,2,3,4,5,6,10 => 7,8,9,10);
foreach($data as $k => $v){
echo $k . '------' . $v .'<br />';
}
?>
foreach遍历多维数组
<?php
$data = array(
0 => array(
'中国' => 'china',
'美国' => 'usa',
'德国' => ' Germany',
),
1 => array(
'湖北' => 'hubei',
'河北' => 'hebei',
'山东' => 'shandong',
'山西' => 'sanxi',
),
);
//注:我们在使用foreach循环时,第一次循环将键为0和键为1的两个数组赋值给一个变量($value)。然后,再套一个循环遍历这个$value变量,$value中的值取出来,赋值给$k和$v。
foreach($data as $value){
foreach($value as $k => $v){
echo $k . '-----' . $v .'<br />';
}
echo '----------分割线-----------<br />';
}
?>