当前位置: 首页 > 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.dtcms.com/a/305070.html

相关文章:

  • C#_ArrayList动态数组
  • 【C#获取高精度时间】
  • 同一个局域网段,如何实现所有用户都可以访问本地mysql数据库?
  • 理解Transformer解码器
  • 【三桥君】企业级AI应用需要系统工程支撑,如何通过MCP大模型架构实现全链路实战解构?
  • 1 RAG三问
  • Javaweb————HTTP请求头属性讲解
  • ​第七篇:Python数据库编程与ORM实践
  • Python的‌列表推导式‌
  • 065_线程创建方式(继承Thread / 实现Runnable Callable)
  • Hyperchain账本数据存储机制详解
  • SpringCloud之Gateway
  • ORACLE的用户维护与权限操作
  • 车载刷写架构 --- 整车刷写中为何增加了ECU 队列刷写策略?
  • 激光雷达/相机一体机 时间同步和空间标定(1)
  • [leetcode] 电话号码的排列组合
  • elememtor 添加分页功能
  • GaussDB 约束的语法
  • 互联网前沿新技术
  • 老年护理实训室建设方案:打造安全、规范、高效的实践教学核心平台
  • win10更新异常,导致Microsoft Store 无法正常启用,无法正常安装exe应用程序。
  • Mqttnet的MqttClientTlsOptions.CertificateValidationHandler详解
  • yolov11的简单实例
  • Python爬虫03_Requests破解百度翻译
  • 7、如何管理昵称重复?
  • claudia for claude code
  • ITIL 4 高速IT:解耦架构——构建快速迭代的技术基座
  • 电商修图,尺寸修改适配各大电商平台
  • Elasticsearch 从入门到精通:术语、索引、分片、读写流程与面试高频题一文搞懂
  • 青少年软件编程图形化Scratch等级考试试卷(四级)2025年6月