PHP 【数组】

一、初识数组

1. 数组就是一个可以存储一组或一系列数值的变量。
2. 数组构成:数组是由一个或多个数组元素组成的
3. 数组元素:一每个数组元素由键(Key)和值(Value)构成
4. 键:“键”为元素的识别名称,也被称为数组下标
5. 值: “值”为元素的内容
6. 映射: “键”和“值”之间存在一种对应关系,称之为映射
7. 类型划分:根据键的数据类型,可以将数组划分为索引数组和关联数组,前者使用数字作为键,后者使用字符串作为键。

8. 索引数组

    索引数组是指键名为整数的数组。默认情况下,索引数组的键名是从0开始,并依次递增。它主要适用于利用位置(0、1、2……)来标识数组元素的情况。另外,索引数组的键名也可以自己指定。

9. 关联数组

    关联数组是指键名为字符串的数组。通常情况下,关联数组元素的“键”和“值”之间有一定的业务逻辑关系。因此,通常使用关联数组存储一系列具有逻辑关系的变量。关联数组的“键”都是字符串,并与“值”之间具有一一对应的关系。

二、数组的基本使用

  • 使用array()函数创建数组
  • 赋值方式
  • 短数组定义法([] PHP 5.4起增加的)

1. 数组的创建——array()语言结构方式–定义索引数组

  array()语言结构中的数组元素使用“键=>值”的方式进行表示,各元素之间使用逗号进行分割。
  $fruits = array('apple', 'grape', 'pear');		// 省略键名
  $sports = array(2 => 'basketball', 4 => 'swimming');	// 指定键名
  数组在省略键名的设置时,默认从0开始,依次递增加1,因此该数组元素的键名依次为“0、1、2”。

PS : 除此之外,还可以根据实际需求自定义数组元素的键名,如上述示例中的$sports数组变量,将其第1个元素键名设置为2,第2个元素的键名设置为4

2. 数组的创建——array()语言结构方式–定义关联数组

$info = array('id' => 10, 'name' => 'Tom', 'tel' => 18810888188);

在定义关联数组时 “键”则有明确的数据类型要求,具体如下。
  • 键只能是整型或字符串型的数据,如果是其他类型,则会执行类型自动转换
  • 合法整型的字符串会被转为整型,如“2”转为2,而“02”则不会被转换
  • 浮点数会被舍去小数部分直接转换成整型,如“2.6”转为2
  • 布尔类型的true会被转为1,false转为0
  • NULL类型会被转为空字符串
  • 若数组中存在相同键名的元素时,后面的元素会覆盖前面元素的值

3. 数组的创建——array()语言结构方式–定义混合数组

在定义数组时,还可以定义没有任何元素的数组,以及既有索引表示方式、又有关联表示方式的数组元素。
$temp = array();
$mixed = array(2, 'str', 'id' => 5, 5 => 'b', 'a');
$mixed数组的元素“b”指定了数字键名为“5”
“b”元素后的“a”元素会自动将前面最大的数字键名加1后,作为其键名,即5+1得到键名6。

4. 数组的定义——array()语言结构方式–定义多维数组

     $data = array(
        0 => array('name' => 'Tom', 'gender' => '男'),
        1 => array('name' => 'Lucy', 'gender' => '女'),
        2 => array('name' => 'Jimmy', 'gender' => '男')
    );

5. 数组的定义——赋值方式

使用赋值方式定义数组,实际上就是创建一个数组变量,然后使用赋值运算符直接给变量赋值。
$arr[] = 123;			// 存储结果:$arr[0] = 123
$arr[] = 'hello';			// 存储结果:$arr[1] = 'hello'
$arr[4] = 'PHP';			// 存储结果:$arr[4] = 'PHP'
$arr['name'] = 'Tom';		// 存储结果:$arr['name'] = 'Tom'
$arr[] = 'Java';			// 存储结果:$arr[5] = 'Java'

PS:赋值方式定义数组就是单独为数组元素赋值。需要注意的是,赋值方式不能定义一个空数组。

6. 数组的定义——短数组定义法([])

短数组定义法([])与array()语法结构相同,只需将array()替换为[]即可
// 相当于:array('wind', 'fine')
$weather = ['wind', 'fine'];
// 相当于:array('id' => 12, 'name' => 'PHP')
$object = ['id' => 12, 'name' => 'PHP'];
// 相当于:array(array(1, 3), array(2, 4))
$num = [[1, 3], [2, 4]];

7. 访问数组

另外,若要一次查看数组中的所有元素,则可以利用前面学习过的输出语句函数print_r()和var_dump(),并且通常情况下为了使输出的函数按照一定的格式打印,查看时经常与pre标记一起使用。

echo '<pre>';
print_r($sub);	// print_r()函数打印数组变量$sub
var_dump($data);	// var_dump()函数打印数组变量$data
echo '</pre>';
// print_r()打印结果
Array
(
    [0] => PHP
    [1] => Java
    [2] => C
    [3] => Android
)
// var_dump()打印结果
array(3) {
  ["goods"]=>
  string(7) "clothes"
  ["num"]=>
  float(49.9)
  ["sales"]=>
  int(500)
}

8. 遍历数组

所谓遍历数组就是一次访问数组中所有元素的操作。通常情况下,使用foreach()语句完成数组的遍历。

    方式一:foreach (数组名称 as 键 => 值) {
        // 处理语句
    }
    方式二:foreach (数组名称 as 值) {
    // 处理语句
}

$info = ['id' => 1, 'usr' => 'Jacie', 'age' => 18];
// 使用方式一
foreach ($info as $k => $v) {
    echo $k . ': ' . $v . ' ';	// 输出的结果:id: 1 usr: Jacie age: 18
}
// 使用方式二
foreach ($info as $v) {
    echo $v . ' ';		// 输出的结果:1 Jacie 18
}

PS:“键”和“值”的变量名可以根据实际情况随意设置

9. 数组的删除

在数组定义完成后,有时也需要根据实际情况去除数组的某个元素。
例如,一个保存全班学生信息的多维数组,若这个班级中有一个学生转学了,那么在这个班级学生信息管理中就需要删除此学生。此时,可以使用PHP提供的unset()函数完成数据的删除。

10. 数组操作符

不仅前面讲解的标量数据类型可以进行比较运算,数组这种复合数据类型也可以进行运算,不过数组有其专门提供的数组操作符进行对应的运算。
在这里插入图片描述

三、数组查找

1. 顺序查找法

 是最简单的查找法,只需按照数组中元素的保存顺序,利用待查的值与数组中的元素从前往后一个一个的进行比较,直到找到目标值或查找失败。

2. 二分查找法

 二分查找法:针对有序数组的一种查找法,它的查询效率非常高。

实现原理:每次将查找值与数组中间位置元素的值进行比较,相等返回;不等则排除掉数组中一半的元素,然后根据比较结果大或小,再与数组中剩余一半中间位置元素的值进行比较,以此类推,直到找到目标值或查找失败。

四、数组排序

1. 冒泡排序

  • 冒泡排序:是计算机科学领域中较简单的排序算法。
  • 实现原理:按照要求从小到大排序或从大到小排序,不断比较数组中相邻两个元素的值,较小或较大的元素前移。冒泡排序比较的轮数是数组长度减1,每轮比较的对数等于数组的长度减当前的轮数。
  • 缺点:冒泡排序的效率很低,在实际中使用较少。

五、数组的常用函数

1. 指针操作函数

数组指针:用于指向数组中的某个元素,默认情况下,指向数组的第1个元素。通过移动或改变指针的位置,可以访问数组中的任意元素。
在这里插入图片描述

2. 数组元素操作函数

在操作数组过程中,经常会遇到在数组的前面或后面添加或删除元素的情况。
在这里插入图片描述

3. 排序函数

对于数组的排序,除了可使用前面小节讲解的排序算法实现外。PHP还提供了内置的数组排序函数,可以轻松对数组实现排序、逆向排序、按键名排序等操作。
在这里插入图片描述

4. 检索函数

数组中元素的查找,除了前面讲解的查找算法外,PHP还为其提供了内置函数。
在这里插入图片描述

5. 其他数组函数
在这里插入图片描述
在这里插入图片描述

六、数组在字符串与函数中的应用

1. 字符串与数组的转换

PHP提供的explode()函数用于根据指定字符对字符串进行分割

  • explode()函数的返回值类型是数组类型
  • 第1个参数表示分隔符
  • 第2个参数表示要分割的字符串
  • 第3个参数是可选的,表示返回的数组中最多包含的元素个数,当其为负数m时,表示返回除了最后的m个元素外的所有元素,当其为0时,则把它当做1处理

PHP提供的implode()函数用于利用指定字符将一维数组内的元素值连接成字符串

  • implode()函数的返回值类型为字符串型
  • 第1个参数表示连接字符串
  • 第2个参数表示待转换的数组。其中,不论指定字符是否存在,只要第2个参数是空数组,结果都为空字符串。
  • 值得一提的是,由于历史原因,该函数的第1个参数可以省略。

2. 字符串转化为数组

// ① 字符串分割成数组
var_dump(explode('n', 'banana'));
// 输出结果:array(3) { [0]=> string(2) "ba" [1]=> string(1) "a" [2]=> string(1) "a" } 
// ② 分割时限制次数
var_dump(explode('n', 'banana', 2));
// 输出结果:array(2) { [0]=> string(2) "ba" [1]=> string(3) "ana" } 
// ③ 返回除了最后2个元素外的所有元素
var_dump(explode('n', 'banana', -2));
// 输出结果:array(1) { [0]=> string(2) "ba" }

3. 数组转换成字符串

// ① 利用指定字符连接一维数组元素的值
echo implode('-', ['a', 'b', 'c']);		// 输出结果:a-b-c
echo implode(',', ['a' => 1, 'b' => 2]); 	// 输出结果:1,2
// ② 省略指定字符
echo implode(['a', 'b', 'c']);			// 输出结果:abc
// ③ 利用指定字符连接一个空数组
var_dump(implode('it', []));		// 输出结果:string(0) ""

猜你喜欢

转载自blog.csdn.net/Yz_010708/article/details/89040770