当前位置: 首页 > news >正文

从0到1学PHP(五):PHP 数组:高效存储与处理数据

目录

  • 一、数组的定义与分类
    • 1.1 索引数组
    • 1.2 关联数组
    • 1.3 多维数组
  • 二、数组的基本操作
    • 2.1 数组元素的添加、删除、修改和访问
    • 2.2 数组指针的操作
  • 三、数组处理函数
    • 3.1 数组排序函数
    • 3.2 数组统计函数
    • 3.3 数组过滤与转换函数


一、数组的定义与分类

在 PHP 中,数组是一种非常重要的数据结构,它允许我们在一个变量中存储多个值,并且可以方便地对这些值进行管理和操作。数组可以分为索引数组、关联数组和多维数组,下面我们来详细了解它们的定义与分类。

1.1 索引数组

索引数组是使用数字索引来存储值的数组,索引从 0 开始依次递增。在 PHP 中,可以使用array()函数或者方括号[]来创建索引数组。例如:

// 使用array()函数创建索引数组
$fruits = array("苹果", "香蕉", "橙子");// 使用方括号创建索引数组
$numbers = [1, 2, 3, 4, 5];

访问索引数组中的元素时,只需使用对应的索引值即可。例如,要访问$fruits数组中的第一个元素,可以这样写:

echo $fruits[0]; // 输出:苹果

也可以通过循环遍历索引数组,例如使用for循环:

$fruits = array("苹果", "香蕉", "橙子");
for ($i = 0; $i < count($fruits); $i++) {echo $fruits[$i]. "<br>";
}

或者使用foreach循环:

$fruits = array("苹果", "香蕉", "橙子");
foreach ($fruits as $fruit) {echo $fruit. "<br>";
}

1.2 关联数组

关联数组与索引数组不同,它使用字符串作为索引(也称为键),而不是数字。这使得我们可以通过有意义的键名来访问数组中的值,提高了代码的可读性和维护性。在 PHP 中,定义关联数组时使用=>符号来指定键值对。例如:

// 创建关联数组
$person = array("name" => "张三","age" => 25,"city" => "北京"
);

访问关联数组中的元素时,使用对应的键名:

echo $person["name"]; // 输出:张三
echo $person["age"]; // 输出:25

同样,也可以使用foreach循环遍历关联数组:

$person = array("name" => "张三","age" => 25,"city" => "北京"
);
foreach ($person as $key => $value) {echo $key. ": ". $value. "<br>";
}

1.3 多维数组

多维数组是指数组中包含其他数组作为元素的数组。这种结构可以用来表示更加复杂的数据,例如表格数据、树状结构等。最常见的多维数组是二维数组,它可以看作是一个由行和列组成的表格。例如,下面是一个二维数组,用于存储学生的成绩:

// 定义二维数组
$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);

在这个二维数组中,$scores[0]表示第一行的成绩,$scores[0][0]表示第一行第一列的成绩(即第一个学生的第一门课成绩)。访问多维数组中的元素时,需要使用多个索引值,例如:

echo $scores[1][2]; // 输出:95,表示第二个学生的第三门课成绩

对于多维数组的遍历,可以使用多层循环。例如,遍历上面的$scores数组:

$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);
for ($i = 0; $i < count($scores); $i++) {for ($j = 0; $j < count($scores[$i]); $j++) {echo $scores[$i][$j]. " ";}echo "<br>";
}

也可以使用foreach循环结合is_array()函数来递归地遍历多维数组:

function printMultiArray($array) {foreach ($array as $value) {if (is_array($value)) {printMultiArray($value);} else {echo $value. " ";}}echo "<br>";
}$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);
printMultiArray($scores);

通过上述介绍,我们对 PHP 中数组的定义与分类有了清晰的认识,这为后续学习数组的基本操作和处理函数打下了坚实的基础。

二、数组的基本操作

在了解了数组的定义与分类后,接下来我们学习数组的基本操作,包括数组元素的添加、删除、修改和访问,以及数组指针的操作。这些操作是我们在使用数组时最常用的,熟练掌握它们可以让我们更加灵活地处理数组数据。

2.1 数组元素的添加、删除、修改和访问

  1. 添加元素
    • 在 PHP 中,向数组添加元素有多种方法。对于索引数组,可以使用方括号[]直接添加元素,PHP 会自动为新元素分配一个合适的索引(通常是当前最大索引加 1)。例如:
$fruits = array("苹果", "香蕉");
$fruits[] = "橙子";
print_r($fruits);

上述代码中,我们先定义了一个包含 “苹果” 和 “香蕉” 的$fruits数组,然后使用$fruits[] = “橙子”;向数组末尾添加了 “橙子” 这个元素,最后使用print_r()函数输出数组内容,可以看到数组变为Array ( [0] => 苹果 [1] => 香蕉 [2] => 橙子 )。

  • 还可以使用array_push()函数向数组末尾添加一个或多个元素。array_push()函数的第一个参数是要操作的数组,后面的参数是要添加的元素。例如:
$fruits = array("苹果", "香蕉");
array_push($fruits, "草莓", "葡萄");
print_r($fruits);

这里通过array_push()函数向$fruits数组中添加了 “草莓” 和 “葡萄” 两个元素,输出的数组为Array ( [0] => 苹果 [1] => 香蕉 [2] => 草莓 [3] => 葡萄 )。

对于关联数组,添加元素时需要指定键名,通过$数组名[键名] = 值;的方式来添加。例如:

$person = array("name" => "张三");
$person["age"] = 25;
$person["city"] = "北京";
print_r($person);

此代码先定义了一个关联数组$person,只有 “name” 这个键值对,然后依次添加了 “age” 和 “city” 键值对,最终输出的数组为Array ( [name] => 张三 [age] => 25 [city] => 北京 )。

  1. 删除元素
    使用unset()函数可以删除数组中的元素。unset()函数接受一个或多个参数,每个参数是要删除的数组元素的索引或键。例如,删除索引数组中的元素:
$fruits = array("苹果", "香蕉", "橙子");
unset($fruits[1]);
print_r($fruits);

这段代码删除了$fruits数组中索引为 1 的元素(即 “香蕉”),输出的数组变为Array ( [0] => 苹果 [2] => 橙子 ),需要注意的是,使用unset()函数删除元素后,数组的索引不会自动重新排列。

对于关联数组,同样使用unset()函数根据键来删除元素:

$person = array("name" => "张三", "age" => 25, "city" => "北京");
unset($person["age"]);
print_r($person);

这里删除了$person数组中 “age” 这个键值对,输出结果为Array ( [name] => 张三 [city] => 北京 )。

  1. 修改元素
    直接通过索引或键对数组元素进行赋值,就可以修改数组中的元素。对于索引数组:
$fruits = array("苹果", "香蕉", "橙子");
$fruits[1] = "芒果";
print_r($fruits);

上述代码将$fruits数组中索引为 1 的元素 “香蕉” 修改为 “芒果”,输出数组为Array ( [0] => 苹果 [1] => 芒果 [2] => 橙子 )。

对于关联数组:

$person = array("name" => "张三", "age" => 25, "city" => "北京");
$person["age"] = 26;
print_r($person);

此代码将$person数组中 “age” 对应的值从 25 修改为 26,输出结果是Array ( [name] => 张三 [age] => 26 [city] => 北京 )。

  1. 访问元素
    通过索引或键来访问数组中的元素。对于索引数组,使用索引值即可访问对应的元素,如$fruits[0]表示访问$fruits数组中的第一个元素。对于关联数组,使用键名来访问元素,如$person[“name”]表示访问$person数组中 “name” 对应的元素。

2.2 数组指针的操作

PHP 数组有一个内部指针,它指向数组中的某个元素,通过一些函数可以操作这个指针,从而实现对数组元素的遍历等操作。常见的数组指针操作函数有current()、next()、prev()、end()和reset()等。

  • current()函数:返回数组中当前指针指向的元素的值。例如:
$fruits = array("苹果", "香蕉", "橙子");
echo current($fruits); // 输出:苹果

数组创建后,指针默认指向第一个元素,所以current($fruits)返回 “苹果”。

  • next()函数:将数组的内部指针向前移动一位,并返回移动后指针指向的元素的值。如果移动后指针超出了数组的范围,则返回false。例如:
$fruits = array("苹果", "香蕉", "橙子");
echo current($fruits). "<br>"; // 输出:苹果
echo next($fruits). "<br>"; // 输出:香蕉
echo next($fruits). "<br>"; // 输出:橙子
echo next($fruits); // 输出:(bool)false
  • prev()函数:与next()函数相反,将数组的内部指针向后移动一位,并返回移动后指针指向的元素的值。如果移动后指针超出了数组的范围,则返回false。例如:
$fruits = array("苹果", "香蕉", "橙子");
next($fruits);
next($fruits);
echo current($fruits). "<br>"; // 输出:橙子
echo prev($fruits). "<br>"; // 输出:香蕉
  • end()函数:将数组的内部指针移动到最后一个元素,并返回最后一个元素的值。例如:
$fruits = array("苹果", "香蕉", "橙子");
echo end($fruits); // 输出:橙子
  • reset()函数:将数组的内部指针重置到第一个元素,并返回第一个元素的值。在多次使用next()或prev()等函数移动指针后,如果想重新从数组开头遍历,可以使用reset()函数。例如:
$fruits = array("苹果", "香蕉", "橙子");
next($fruits);
next($fruits);
echo current($fruits). "<br>"; // 输出:橙子
reset($fruits);
echo current($fruits); // 输出:苹果

通过这些数组指针操作函数,我们可以灵活地遍历数组,按照自己的需求对数组元素进行处理。

三、数组处理函数

在 PHP 中,提供了丰富的数组处理函数,这些函数可以帮助我们更高效地对数组进行各种操作。下面将介绍数组排序函数、数组统计函数以及数组过滤与转换函数。

3.1 数组排序函数

PHP 提供了多个数组排序函数,每个函数都有其独特的用途和特点。

  • sort () 函数:用于对索引数组进行升序排序。排序后,数组的索引会重新从 0 开始依次递增。例如:
$numbers = array(5, 2, 8, 1, 9);
sort($numbers);
print_r($numbers);

上述代码中,$numbers数组初始包含 5 个元素,使用sort()函数排序后,输出结果为Array ( [0] => 1 [1] => 2 [2] => 5 [3] => 8 [4] => 9 ) ,可以看到数组元素按照从小到大的顺序排列,且索引重新分配。

  • rsort () 函数:与sort()函数相反,用于对索引数组进行降序排序,排序后索引同样会重新从 0 开始依次递增。例如:
$numbers = array(5, 2, 8, 1, 9);
rsort($numbers);
print_r($numbers);

这里$numbers数组经过rsort()函数处理后,输出结果为Array ( [0] => 9 [1] => 8 [2] => 5 [3] => 2 [4] => 1 ),数组元素按从大到小的顺序排列,索引重新生成。

  • asort () 函数:用于对关联数组按照值进行升序排序,排序后键值对的关联关系保持不变。例如:
$person = array("name" => "张三","age" => 25,"city" => "北京"
);
asort($person);
print_r($person);

运行这段代码,$person数组会根据值进行升序排序,输出结果为Array ( [age] => 25 [city] => 北京 [name] => 张三 ) ,可以看到键值对的对应关系依然存在,只是按照值的大小重新排列了顺序。

  • arsort () 函数:与asort()函数相反,对关联数组按照值进行降序排序,同时保持键值对的关联关系。例如:
$person = array("name" => "张三","age" => 25,"city" => "北京"
);
arsort($person);
print_r($person);

此时$person数组按值降序排序,输出为Array ( [name] => 张三 [city] => 北京 [age] => 25 ) 。

  • ksort () 函数:用于对关联数组按照键进行升序排序,键值对的关联关系在排序后保持不变。例如:
$person = array("name" => "张三","age" => 25,"city" => "北京"
);
ksort($person);
print_r($person);

运行结果为Array ( [age] => 25 [city] => 北京 [name] => 张三 ),数组按照键名的字母顺序(升序)进行了排序。

  • krsort () 函数:与ksort()函数相反,对关联数组按照键进行降序排序,键值对的关联关系保持不变。例如:
$person = array("name" => "张三","age" => 25,"city" => "北京"
);
krsort($person);
print_r($person);

输出结果为Array ( [name] => 张三 [city] => 北京 [age] => 25 ),数组按照键名的字母顺序(降序)进行了排序。

3.2 数组统计函数

PHP 中的数组统计函数可以帮助我们获取数组的一些统计信息,如元素个数、最大值和最小值等。

  • count () 函数:用于计算数组中的元素个数,对于多维数组,还可以通过设置参数来递归计算所有元素的总数。其基本语法为int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ),其中$array_or_countable是要计数的数组或实现了Countable接口的对象,$mode是可选参数,默认值COUNT_NORMAL表示只计算第一级元素,如果设置为COUNT_RECURSIVE,则递归计算所有元素。例如:
$fruits = array("苹果", "香蕉", "橙子");
echo count($fruits); // 输出:3

对于多维数组:

$nestedArray = array(array(1, 2, 3),array(4, 5),array(6)
);
echo count($nestedArray); // 输出:3,只计算第一级元素个数
echo count($nestedArray, COUNT_RECURSIVE); // 输出:6,递归计算所有元素个数
  • max () 函数:返回数组中的最大值。例如:
$numbers = array(5, 2, 8, 1, 9);
echo max($numbers); // 输出:9

如果数组中包含字符串类型的元素,max()函数会按照字符串的字典序进行比较。例如:

$strings = array("banana", "apple", "cherry");
echo max($strings); // 输出:cherry
  • min () 函数:与max()函数相反,返回数组中的最小值。例如:
$numbers = array(5, 2, 8, 1, 9);
echo min($numbers); // 输出:1

同样,对于包含字符串元素的数组,min()函数按字典序返回最小的字符串:

$strings = array("banana", "apple", "cherry");
echo min($strings); // 输出:apple

3.3 数组过滤与转换函数

  • array_filter () 函数:使用回调函数过滤数组中的元素。该函数会将数组中的每个元素传递给回调函数,如果回调函数返回true,则该元素会被保留在结果数组中;如果返回false,则该元素会被过滤掉。其语法为array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )。例如,过滤出数组中的奇数:
$numbers = array(1, 2, 3, 4, 5);
function isOdd($number) {return $number % 2 == 1;
}
$filteredNumbers = array_filter($numbers, 'isOdd');
print_r($filteredNumbers);

上述代码中,array_filter()函数使用isOdd回调函数对$numbers数组进行过滤,只有奇数元素被保留,输出结果为Array ( [0] => 1 [2] => 3 [4] => 5 )。

  • array_flip () 函数:用于交换数组中的键和值,即原来的键变为值,原来的值变为键。需要注意的是,如果数组中有重复的值,在交换后,后面的键会覆盖前面的键,因为键在数组中必须是唯一的。例如:
$fruits = array("苹果" => "red", "香蕉" => "yellow", "橙子" => "orange");
$flippedFruits = array_flip($fruits);
print_r($flippedFruits);

运行结果为Array ( [red] => 苹果 [yellow] => 香蕉 [orange] => 橙子 ) ,实现了键值的交换。如果原数组中有重复值,比如:

$colors = array("apple" => "red", "cherry" => "red");
$flippedColors = array_flip($colors);
print_r($flippedColors);

输出结果为Array ( [red] => cherry ),因为 “red” 值重复,后面的 “cherry” 键覆盖了前面的 “apple” 键。

http://www.lryc.cn/news/603507.html

相关文章:

  • Linux网络管理
  • 万字详解——OSI七层模型:网络通信的完整架构解析
  • 机器学习-十大算法之一线性回归算法
  • Nginx反向代理的网站服务,然后将http重定向到https
  • 无人机图传:让天空视角 “触手可及”
  • .NET 10 中的新增功能系列文章1——运行时中的新增功能
  • 【C#|C++】C#调用C++导出的dll之非托管的方式
  • 百度前端面试题目整理
  • 基于springboot/java/VUE的旅游管理系统/旅游网站的设计与实现
  • 算法提升之数论(矩阵+快速幂)
  • [2025CVPR-图象分类]ProAPO:视觉分类的渐进式自动提示优化
  • B 站搜一搜关键词优化:精准触达用户的流量密码
  • deepseek+飞书多维表格 打造小红书矩阵
  • 线程崩溃是否导致进程崩溃
  • 【CAN总线】STM32 的 CAN 总线通信开发笔记(基于 HAL)
  • 【开源项目】轻量加速利器 HubProxy 自建 Docker、GitHub 下载加速服务
  • 系统改造:一次系统领域拆分的实战复盘
  • 多态示例。
  • kotlin使用mybatis plus lambdaQuery报错
  • XtestRunner一个比较好用好看的生成测试报告的工具
  • 系统间复制文档
  • 论文阅读--射频电源在半导体领域的应用
  • React--》实现 PDF 文件的预览操作
  • 配置daemon.json使得 Docker 容器能够使用服务器GPU【验证成功】
  • VitePress学习笔记
  • 彻底清理ArcGIS 10.2残留的步骤
  • Windows使用Powershell自动安装SqlServer2025服务器与SSMS管理工具
  • Vue.js 完全指南:从入门到精通
  • getgff.py脚本-python006
  • openbmc 阈值sensor分析