1.数组简介及分类
数组定义
- 数组是PHP中的重要数组类型之一,是复合类型
- 数据的集合,在PHP中数组是一个有序映射
数组分类
-
索引数组
- 数组的下标是数字
D:\php20190701\php_code\0807\array.php:10: array (size=3) 0 => string 'first' (length=5) 1 => string 'second' (length=6) 2 => string 'third' (length=5) -
关联数组
- 数组的下标为字符是关联数组
D:\php20190701\php_code\0807\array.php:10: array (size=3) 'one' => string 'first' (length=5) 'two' => string 'second' (length=6) 'three' => string 'third' (length=5) -
注意
- PHP中数组其实是不区分索引还是关联数组,都是根据键名找到对应的键值
2.定义数组
通过array()形式
<?php
$arr = array(
'one'=>'first',
'two'=>'second',
'three'=>'third'
);
var_dump($arr);
- array()空数组
<?php
$arr = array(); // 空数组
$arr1 = []; // 空数组
- array(值,...)下标连续的索引数组,下标从0开始
- array(键名=>键值,...)指定下标的索引数组、关联数组、混合数组
<?php
$arr = array(
'first'=>123,
'second'=>'hello',
'third'=>array(
'hello',
'world'
),
'forth'=>array(
'one'=>'hello',
'two'=>'world'
)
);
-
通过[]的形式定义数组,代替array()
-
注意
-
检测是否为数组
- var_dump()
- gettype() // 返回array
- is_array() // 返回true
-
数组键名
- 使用合法的数字字符串
<?php $arr = [ 1=>'first', '1'=>'second' // 会覆盖 ]; var_dump($arr);- 浮点数会舍掉小数部分,取整作为键名
<?php $arr = [ 1.1=>'first', 2.2=>'second', 2.3=>'third', // 会把second覆盖掉 ]; var_dump($arr);D:\php20190701\php_code\0807\array2.php:10: array (size=2) 1 => string 'first' (length=5) 2 => string 'second' (length=6)- 布尔true->1,false->0
<?php $arr = [ true=>'first', false=>'second' ]; var_dump($arr);D:\php20190701\php_code\0807\array2.php:9: array (size=2) 1 => string 'first' (length=5) 0 => string 'second' (length=6)- null->空字符串
<?php $arr = [ null=>'first', // 会转成空字符串 '1'=>'second' ]; var_dump($arr); var_dump($arr['']); // 可以使用空字符串来取值- 键名重复,后面的会覆盖之前的键值(value), 1和"1"是重复键(key)名
- 如果没有指定键名,而且键名不都为负数,新添加的元素的键名为已有键名最大值加1
<?php $arr = [ 1=>'first', // 会转成空字符串 11=>'second', 'three'=>'third' ]; $arr[] = "forth"; var_dump($arr);- 如果键名都为负数,那么新添加的元素键名从0开始
<?php $arr = [ -2=>'first', // 会转成空字符串 -11=>'second', 'three'=>'third' ]; $arr[] = "forth"; var_dump($arr);D:\php20190701\php_code\0807\array2.php:13: array (size=4) -2 => string 'first' (length=5) -11 => string 'second' (length=6) 'three' => string 'third' (length=5) 0 => string 'forth' (length=5)
-
通过[]动态创建
- $数组名称[]=值
- 下标连续的索引数组
<?php
$arr = [];
$arr[] = 'first';
$arr[] = 'second';
$arr[] = 'third';
$arr[] = 'forth';
$arr[] = 'fifth';
$arr[] = 'sixth';
$arr[] = 'seventh';
var_dump($arr);
D:\php20190701\php_code\0807\array2.php:13:
array (size=7)
0 => string 'first' (length=5)
1 => string 'second' (length=6)
2 => string 'third' (length=5)
3 => string 'forth' (length=5)
4 => string 'fifth' (length=5)
5 => string 'sixth' (length=5)
6 => string 'seventh' (length=7)
- $数组名称[键名]=值
- 指定下标的索引数组和关联数组
<?php
$arr = [];
$arr['one'] = 'first';
$arr['two'] = 'second';
$arr['three'] = 'third';
$arr[] = 'forth';
$arr[] = 'fifth';
$arr[] = 'sixth';
$arr['seven'] = 'seventh';
var_dump($arr);
D:\php20190701\php_code\0807\array2.php:13:
array (size=7)
'one' => string 'first' (length=5)
'two' => string 'second' (length=6)
'three' => string 'third' (length=5)
0 => string 'forth' (length=5)
1 => string 'fifth' (length=5)
2 => string 'sixth' (length=5)
'seven' => string 'seventh' (length=7)
通过range()和compact()快速创建
- range()快速创建下标连续的索引数组
- 第一个参数: 开始
- 第二个参数: 结束
- 第三个参数: 步长
- 包含开始和结束
<?php
var_dump(range(1,10,1));
D:\php20190701\php_code\0807\array2.php:5:
array (size=10)
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
5 => int 6
6 => int 7
7 => int 8
8 => int 9
9 => int 10
- compact()快速创建关联数组, 参数为变量名(字符串)
<?php
$username = "zhangsan";
$age = 18;
$sex = 'male';
$userinfo = compact('username','age','sex');
var_dump($userinfo);
通过define()定义常量数组
<?php
define('HELLO',['hello','world']);
var_dump(HELLO);
HELLO[0] = "!!!"; // 报错
3.使用数组
原则
- 根据键名找键值
数组名称{键名}
<?php
$arr = ['hello','world'];
echo $arr{0};
4.其它类型转换成数组
临时转换
- (array)$var
永久转换
- settype(
type)
注意
- 标量类型转换成数组,只有一个元素,键名为0,键值为变量的值
- null转换成数组是空数组, 不是
[0=>null] - 不要把对象和资源转换成数组
5.数组运算符
+运算符
- 合并数组,如果键名相同,使用前面数组的键值
<?php
$arr1 = [
'hello','world'
];
$arr2 = [
'hello','php'
];
var_dump($arr1+$arr2);
D:\php20190701\php_code\0807\array_op.php:11:
array (size=2)
0 => string 'hello' (length=5)
1 => string 'world' (length=5)
==
- 只比较键名和键值是否相同,如果相同返回true,否则返回false
<?php
$arr1 = [
0=>'1',
1=>'world'
];
$arr2 = [
"0"=>1,
"1"=>'world'
];
var_dump($arr1 == $arr2); // true, 不比较顺序
===
- 既要比较键名和键值是否相同,还要比较类型和顺序
<?php
$arr1 = [
0=>'1',
1=>'world',
];
$arr2 = [
"0"=>'1',
"1"=>'world',
];
var_dump($arr1 === $arr2); // 下标, 值的类型, 顺序都必须一样
!= <>
- 相当于取反
!==
- 相当于取反