[Toc]
标量变量 只能存储单个数值。 数组(复合类型) 是一个可以存储一组或一系列数值的数据集合。
一、数组声明
先思考一个问题:如何检测一个变量是否是数组?
- 存储在数组中的值称为数组元素,又叫键值
- 每个数组元素有一个相关的索引(下标/键名),用它可以来访问元素。
//声明一个空数组
$arr = array();
//PHP5.4+
$arr2 = [];
//声明一个多个元素的数组
$nvshen = array('白晶晶','紫霞','春三十娘','如花');
//PHP5.4+
$nvshen = ['白晶晶','紫霞','春三十娘','如花'];
二、数组的分类
索引数组:下标是数字的 关联数组:下标是字符串
1、索引数组
$nvshen = ['白晶晶','紫霞','春三十娘','如花'];
//自动创建索引数组
$newArray = range(0, 10,2);
var_dump($newArray);
2、关联数组
$role = ['mo'=>'白晶晶','zhuyin'=>'紫霞'];
$role['zhou'] = '至尊宝';
3、多维数组
数组中的元素仍为数组,就构成了包含数组元素的数组,即多维数组
$products = array(
'iphone' => array('iphone5','iphone6','iphone7'),
'xiaomi' => array('mi1','mi2','mi3'),
'huawei' => array('hw1','hw2')
);
$cars = array(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
echo $cars[0][0].": 库存:".$cars[0][1].", 销量:".$cars[0][2].".<br>";
echo $cars[1][0].": 库存:".$cars[1][1].", 销量:".$cars[1][2].".<br>";
echo $cars[2][0].": 库存:".$cars[2][1].", 销量:".$cars[2][2].".<br>";
echo $cars[3][0].": 库存:".$cars[3][1].", 销量:".$cars[3][2].".<br>";
三、动态生成数组
$nvshen = array('白晶晶','紫霞','春三十娘','如花');
$nvshen[4] = '二当家的';
$nvshen[5] = '观音姐姐';
$nvshen[] = '铁扇公主';
//生成多维数组
$nvshen[][] = '牛夫人';
$arr = ['key'=>'string','hello'=>'world','abc'=>['string','hello',1,34.56]];
//$arr['abc']['niai'] = '铁锤妹妹';
四、操作数组
1、直接使用下标
echo $newArray[0];
echo $newArray['product']['brand']['model'];
2、使用循环遍历
2.1、使用for循环来循环索引数组
$indexCount = count($nvshen);
for ($i = 0; $i < $indexCount; $i++) {
echo $nvshen[$i],'<hr/>';
}
2.2、使用数组专用的foreach遍历关联数组(推荐)
foreach ($nvshen as $arr){
echo $arr,'<hr/>';
}
foreach ($role as $key=>$value){
echo $key.'----'.$value,'<hr/>';
}
五、修改/删除数组元素
//修改
$role = ['mo'=>'白晶晶','zhuyin'=>'紫霞'];
$role['mo'] = '白骨精';
//删除
unset($role['zhou']);
unset($array[0][1]);
六、常用的几个函数(看手册)
- in_array()
- sort()
- array_key_exists()
七、下标和值不得不说的故事
1、下标的强制转换
- 浮点数会转化为整型
- 布尔类型的会转化为1/0
- null转化为空字符串
$arr = [12.34=>'a',true=>'b',null=>'c']; print_r($arr); /* Array ( [12] => a [1] => b [] => c ) */
- 下标为负数情况
//下标不都为负数,新产生的下标是:最大下标+1 $score = array( -1=>60, -2=>50, 8=>80 ); $score[] = 100; print_r($score); /* Array ( [-1] => 60 [-2] => 50 [8] => 80 [9] => 100 ) */ //下标全都为负数 新产生的下标是:0 $score = array( -1=>60, -2=>50, -8=>80 ); $score[] = 100; print_r($score); /* Array ( [-1] => 60 [-2] => 50 [-8] => 80 [0] => 100 ) */
2、元素值的强制转换
- 布尔类型的true会转化为:1
- 布尔类型的false会转化为:空字符
- null转化为空字符串
$arr = [true,false,null,12.34];
print_r($arr);
/*
Array
(
[0] => 1
[1] =>
[2] =>
[3] => 12.34
)
*/