索引数组是指键名为整数
的数组。默认
情况下,索引数组的键名是从0开始
,并依次递增。它主要适用于利用位置(0、1、2……)来标识数组元素的情况。另外,索引数组的键名也可以自己指定。
关联数组是指键名为字符串
的数组。通常情况下,关联数组元素的“键”和“值”之间有一定的业务逻辑关系。因此,通常使用关联数组存储一系列具有逻辑关系的变量。关联数组的“键”都是字符串,并与“值”之间具有一一对应的关系。
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
array() 语言结构法:array()语言结构中的数组元素使用键=>值
的方式进行表示,各元素之间使用逗号,
进行分割。
$fruits = array('apple', 'grape', 'pear'); // 省略键名
$sports = array(2 => 'basketball', 4 => 'swimming',); // 指定键名
数组在省略键名的设置时,默认从0开始,依次递增加1,因此该数组元素的键名依次为“0、1、2”。
除此之外,还可以根据实际需求自定义数组元素的键名,如上述示例中的$sports数组变量,将其第1个元素键名设置为2,第2个元素的键名设置为4,若无特殊,第3个元素的键名就从5开始。
举例:
$fruits = array('apple', 'grape', 'pear');
echo $fruits[0];
echo '
';
echo $fruits[1];
echo '
';
echo $fruits[2];
echo '
';
?>
<?php
$sports = array(2 => 'basketball', 4 => 'swimming');
echo $sports[2];
echo '
';
echo $sports[4];
echo '
';
$info = array('id' => 10, 'name' => 'Tom', 'tel' => 18810888188);
?>
在定义关联数组时 “键”则有明确的数据类型要求,具体如下:
在定义数组时,还可以定义没有任何元素的数组,以及既有索引表示方式、又有关联表示方式的数组元素。
$mixed = array(2, 'str', 'id' => 5, 5 => 'b', 'a');
echo $mixed['6'];
$mixed数组的元素“b”指定了数字键名为“5”, “b”元素后的“a”元素会自动将前面最大的数字键名加1
后,作为其键名,即5+1得到键名6。
多维数组是包含一个或多个数组的数组。 在多维数组中,主数组中的每一个元素也可以是一个数组,子数组中的每一个元素也可以是一个数组。 一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组,依照这种方式,我们可以创建二维或者三维数组。
$data = array(
0 => array('name' => 'Tom', 'gender' => '男'),
1 => array('name' => 'Lucy', 'gender' => '女'),
2 => array('name' => 'Jimmy', 'gender' => '男')
);
print_r($data[0]); //输出第一个元素
print_r($data[1]);
使用赋值方式定义数组,实际上就是创建一个数组变量,然后使用赋值运算符直接给变量赋值。
$arr[] = 123; //没有写下标自动索引+1赋值 arr[0] // 存储结果:$arr[0] = 123
$arr[] = 'hello'; //这里就赋值arr[1] // 存储结果:$arr[1] = 'hello'
$arr[4] = 'PHP'; // 存储结果:$arr[4] = 'PHP'
$arr['name'] = 'Tom'; // 存储结果:$arr['name'] = 'Tom'
$arr[] = 'Java'; // 存储结果:$arr[5] = 'Java'
print_r($arr);
?>
输出结果:
echo 'body -html' Array ( [0] => 123 [1] => hello [4] => PHP [name] => Tom [5] => Java )
赋值方式定义数组就是单独为数组元素赋值。需要注意的是,赋值方式不能定义一个空数组。
短数组定义法 [ ] 与array()语法结构相同,只需将array()替换为[ ]即可
//创建一个空数组
$arr = array();
var_dump( $arr );
$arrs = [];
var_dump( $arrs );
更详细例子:
// 相当于:array('id' => 12, 'name' => 'PHP')
$object = ['id' => 12, 'name' => 'PHP'];
//相当于:array(array(1, 3), array(2, 4))
执行结果:
echo 'body -html' Array ( [id] => 12 [name] => PHP ) Array ( [id] => 12 [name] => PHP )
数组定义完成后,若想要查看数组中某个具体的元素,则可以通过“数组名[键]”的方式获取。
$sub = ['PHP', 'Java', 'C', 'Android'];
$data = ['goods' => 'clothes', 'num' => 49.90, 'sales' => 500];
echo $sub[1]; // 输出结果:Java
echo $sub[3]; // 输出结果:Android
echo $data['goods']; // 输出结果:clothes
echo $data['sales']; // 输出结果:500
另外,若要一次查看数组中的所有元素,则可以利用前面学习过的输出语句函数print_r()
和var_dump()
,并且通常情况下为了使输出的函数按照一定的格式打印,查看时经常与pre
标记一起使用。
使用echo
打印数据只会打印arr不会把arr数组里的值打印出来
。
注意:标签加上
print_r( )
函数格式化
输出:
$arr = [
'纯净水',
'矿泉水',
'苏打水',
];
print_r($arr)
echo ''
;
print_r($arr); // print_r()函数打印数组变量$arr
echo '
';
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "
";
}
?>
如果是遍历无顺序的数组,由于数组中的键没有规律可循,所以可以使用foreach循环语句,foreach仅用于数组,有两种
语法。格式如下:
第一种格式:
foreach ($array as $value){循环体}
第二种格式:
foreach($array as $key => $value){循环体}
$array表示数组 as $key表示键 $value表示值
举例:
$h=array("可乐","雪碧","柠檬茶");
foreach($h as $value){
echo "$value
";
}
?>
不仅前面讲解的标量数据类型可以进行比较运算,数组这种复合数据类型也可以进行运算,不过数组有其专门提供的数组操作符进行对应的运算。
“+”为联合运算符,用于合并数组,如果出现下标相同
的元素,则保留第1个
数组内的元素。
$num = [2, 4];
$alp = ['a', 'b', 'c'];
$mer1 = $num + $alp; // [2, 4] + ['a', 'b', 'c'];
$mer2 = $alp + $num;
print_r($mer1); // 输出结果:Array ( [0] => 2 [1] => 4 [2] => c )
echo '
';
print_r($mer2); // 输出结果:Array ( [0] => a [1] => b [2] => c )
array_combine 函数,通过合并两个数组来创建一个新数组,其中的一个数组是键名
,另一个数组的值为键值
。
$a=['id','name','email','age'];
$b=['1','小马','[email protected]','20'];
$c=array_combine($a,$b);
print_r($c);
?>
对于数组的排序,除了可使用前面讲解的排序算法实现外,PHP还提供了内置的数组排序函数,可以轻松对数组实现排序、逆向排序、按键名排序等操作。
函数名称 | 功能描述 |
---|---|
sort() |
对数组排序(从低到高) |
rsort() |
对数组逆向排序(从高到低) reverse |
asort() | 对数组进行排序并保持键值关系 |
ksort() | 对数组按照键名排序 |
arsort() | 对数组进行逆向排序并保持键值关系 |
krsort() | 对数组按照键名逆向排序 |
shuffle() | 将数组元素顺序打乱 |
array_multisort() | 对多个数组或多维数组进行排序 |
php增加数组元素的方法是:可以通过array_push()函数来实现。该函数可以向数组尾部插入一个或多个元素,并返回新数组的元素个数。
函数语法:【array_push(array, value)】
函数介绍:array_push() 函数向数组尾部插入一个或多个元素。该函数返回新数组的元素个数。
函数语法: array_push(array,value1,value2…)
array必须,规定一个数组;value1必须,规定要添加的值;value2可选,规定要添加的值;
举例:
$a=array("red","green");
array_push($a,"blue","yellow");
print_r($a);
?>
在数组定义完成后,有时也需要根据实际情况去除数组的某个元素。
例如,一个保存全班学生信息的多维数组,若这个班级中有一个学生转学了,那么在这个班级学生信息管理中就需要删除此学生。此时,可以使用PHP提供的unset()函数完成数据的删除。
数组删除:
$array = array(0 => "a", 1 => "b", 2 => "c");
unset($array[1]); //你要删除的数组元素值的键
print_r($array);
unset ($bar['quux']); // 销毁单个数组元素
?>
array_replace() 函数使用后面数组的值替换第一个数组的值。
$a1=array("red","green");
$a2=array("blue","yellow");
var_dump($a1);
echo '
';
var_dump(array_replace($a1,$a2));
?>
使用修下标改数组
$arr=array(11,22,33,44);
$arr[0]=66; //数组变为$arr=array(66,22,33,44);;
print_r($arr);
?>
顺序查找法是最简单的查找法,只需按照数组中元素的保存顺序,利用待查的值与数组中的元素从前往后一个一个的进行比较,直到找到目标值或查找失败。
array_search() 函数在数组中搜索某个键值,并返回对应的键名。
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a);
?>
数组指针:用于指向数组中的某个元素,默认情况下,指向数组的第1个元素。通过移动或改变指针的位置,可以访问数组中的任意元素。
函数名称 | 功能描述 |
---|---|
current() |
获取数组中当前指针指向的元素的值 |
key() |
获取数组中当前指针指向的元素的键 |
next() | 将数组中的内部指针向前移动一位 |
prev() | 将数组中的内部指针倒回一位 |
each() | 获取数组中当前的键值对并将数组指针向前移动一步 |
end() | 将数组的内部指针指向最后一个元素 |
reset() | 将数组的内部指针指向第一个元素 |
$arr=['a','b','c','d','e','f'];
//刚开始指针指向a
echo key($arr) . ' - ' . current($arr); //0 -a // 获取当前指针指向的键和值:0 - a
echo ''.PHP_EOL;
next($arr);
echo key($arr) . ' - ' . current($arr); //1-b
echo ''.PHP_EOL;
next($arr);
echo key($arr) . ' - ' . current($arr); //2-c
echo ''.PHP_EOL;
prev($arr); //回退一个
echo key($arr) . ' - ' . current($arr); //1-b
echo ''.PHP_EOL;
reset($arr); //复位
echo key($arr) . ' - ' . current($arr); //0-a
echo ''.PHP_EOL;
echo end($arr);
echo key($arr) . ' - ' . current($arr); //5-f
echo ''.PHP_EOL;
?>
输出结果:
0 - a
1 - b
2 - c
1 - b
0 - a
f5 - f
在操作数组过程中,经常会遇到在数组的前面或后面添加或删除元素的情况。
函数名称 | 功能描述 |
---|---|
array_pop() | 将数组最后一个元素弹出(出栈) |
array_push() | 将一个或多个元素压入数组的末尾(入栈)//在末尾插入元素 |
array_unshift() | 在数组开头插入一个或多个元素 //在开头 |
array_shift() | 将数组开头的元素移出数组 |
array_unique() | 移除数组中重复的值 |
array_slice() | 从数组中截取部分数组 |
array_splice() | 将数组中的一部分元素去掉并用其他值取代 |
举例:
$arr = ['puff', 'Tiramisu'];
array_pop($arr); // 移出数组最后一个元素
print_r($arr); // 输出结果:Array ( [0] => puff )
array_push($arr, 'cookie'); // 在数组末尾添加元素
print_r($arr); // 输出结果:Array ( [0] => puff [1] => cookie )
array_unshift($arr, 22, 33);// 在数组开头插入多个元素
print_r($arr); // 输出结果: Array ( [0] => 22 [1] => 33 [2] => puff [3] => cookie )
array_shift($arr); // 移出数组第一个元素
print_r($arr); // 输出结果:Array ( [0] => 33 [1] => puff [2] => cookie )
数组中元素的查找,除了前面讲解的查找算法外,PHP还为其提供了内置函数。
函数名称 | 功能描述 |
---|---|
in_array() | 检查数组中是否存在某个值,注意搜索的是value 不是key |
array_search() | 在数组中搜索给定的值,如果成功则返回相应的键名,搜索的是value |
array_key_exists() | 检查给定的键名是否存在于数组中,这里才是搜索的是key |
in_array()
和array_key_exists()
函数的返回值
类型均为布尔型
,检测的数据存在返回true,否则返回false。
函数array_search()
的返回值
则是查找的“值”对应的键名
。检索函数返回值类型对程序开发中的判断起着重要的作用。
除了前面提到的几种类型外,PHP还提供了很多其他常用的数组函数。如建立指定范围的数组,获取数组中所有元素的值或键名等。
函数名称 | 功能描述 |
---|---|
count() | 计算数组中的元素数目或对象中的属性个数 |
range() | 建立一个包含指定范围元素的数组 |
array_rand() | 从数组中随机取出一个或多个元素 |
array_keys() | 获取数组中部分的或所有的键名 |
array_values() | 获取数组中所有的值 |
array_column() | 获取数组中指定的一列 |
array_sum() | 计算数组中所有值的和 |
array_reverse() | 返回一个元素顺序相反的数组 |
函数名称 | 功能描述 |
---|---|
array_merge() | 合并一个或多个数组 |
array_flip() | 交换数组中的键和值 |
array_combine() | 创建数组,用一个数组的值作为其键名,另一个数组的值作为其值 |
array_chunk() | 将一个数组分割成多个 |
array_fill() | 用给定的值填充数组 |
array_replace() | 使用传递的数组替换第一个数组的元素 |
array_map() | 为数组中的每个元素应用回调函数 |
array_walk() | 使用自定义函数对数组中的每个元素做回调处理 |
字符串 ‘abc’ 可以认为是字符数组[‘a’,‘b’,‘c’]
PHP提供的explode()函数用于根据指定字符对字符串进行分割
explode()函数
的返回值类型是数组类型
limit
的可能的值:
举例:
// 字符串分割成数组
echo '>>>>';
var_dump(explode('n', 'banana'));
输出结果:
array(3) { [0]=> string(2) "ba" [1]=> string(1) "a" [2]=> string(1) "a" }
// 分割时限制次数
echo '>>>>';
var_dump(explode('n', 'banana', 2));
输出结果:
array(2) { [0]=> string(2) "ba" [1]=> string(3) "ana" }
// 返回除了最后2个元素外的所有元素
echo '>>>>';
var_dump(explode('n', 'banana', 0));
输出结果:
array(1) { [0]=> string(6) "banana" }
// 返回除了最后1个元素外的所有元素
echo '>>>>';
var_dump(explode('n', 'banana', -1));
输出结果:
array(2) { [0]=> string(2) "ba" [1]=> string(1) "a" }
// 返回除了最后2个元素外的所有元素
echo '>>>>';
var_dump(explode('n', 'banana', -2)); //ba
输出结果:
array(1) { [0]=> string(2) "ba" }
PHP提供的implode()函数用于利用指定字符将一维数组内的元素值连接成字符串
值得一提的是,由于历史原因,该函数的第1个参数可以省略。
举例:
//['a', 'b', 'c'] abc a-b-c
// ① 利用指定字符连接一维数组元素的值
echo implode('-', ['a', 'b', 'c']); // 输出结果:a-b-c
echo PHP_EOL;
echo implode(',', ['a' => 1, 'b' => 2]); // 输出结果:1,2
// ② 省略指定字符
echo PHP_EOL;
echo implode(['a', 'b', 'c']); // 输出结果:abc
// ③ 利用指定字符连接一个空数组
echo PHP_EOL;
var_dump(implode('it', [])); // 输出结果:string(0) ""
?>