理解 PHP 中的数组
在本文中,我们将了解什么是 PHP 中的数组的基础知识。 我们将学习如何创建数组以及如何使用关联数组和多维数组,并且大家将看到许多使用 PHP 的数组值示例。
什么是 PHP 中的数组?
在 PHP 中,数组是一种数据结构,它允许我们将多个元素存储在单个变量中。 这些元素存储为键值对。 事实上,只要需要存储元素列表,就可以使用数组。 通常情况下,数组中的所有项都具有相似的数据类型。
例如,假设我们要存储水果名称。 如果没有数组,我们最终会创建多个变量来存储不同的水果名称。 另一方面,如果我们使用数组来存储水果名称,它可能看起来像这样:
$array_fruits = array('Apple', 'Orange', 'Watermelon', 'Mango');
如大家所见,我们使用了 $array_fruits
变量来存储不同的水果名称。 这种方法的一大优点是我们可以稍后向 $array_fruits
数组变量添加更多元素。
在 PHP 中有很多方法可以操作数组值——我们将在本文的后面部分探讨这些方法。
如何初始化数组
在本节中,我们将探讨如何在 PHP 中初始化数组变量并在该变量中添加值。
当涉及到数组初始化时,有几种不同的方法。 在大多数情况下,它是用于初始化数组的 array()
语言构造。
$array = array();
在上面的代码片段中,$array
变量是用一个空白数组初始化的。
从 PHP 5.4 开始,我们还可以使用以下语法来初始化数组。
$array = [];
现在,让我们看看如何向这个 PHP 数组数据结构中的数组添加元素:
$array = [];
$array[] = 'One';
$array[] = 'Two';
$array[] = 'Three';
echo '<pre>';
print_r($array);
上面的代码片段应该产生以下输出:
Array
(
[0] => One
[1] => Two
[2] => Three
)
这里要注意的重要一点是 PHP 中的数组索引从 0 开始。每当我们向数组添加一个新元素而不指定索引时,数组会自动分配一个索引。
当然,我们也可以创建一个已经用值初始化的数组。 如果我们已经知道数组的值,这是用 PHP 声明数组的最简洁的方法。
$array = ['One', 'Two', 'Three'];
如何访问数组元素
在上一节中,我们讨论了如何初始化数组变量。 在本节中,我们将探讨几种访问数组元素的不同方法。
访问数组元素的第一个明显方法是通过数组键或索引获取它们。
$array = ['One', 'Two', 'Three'];
// 获取 $array 数组的第一个元素
echo $array[0];
echo "<br>";
// 获取 $array 数组的第二个元素
echo $array[1];
echo "<br>";
// 获取 $array 数组的第三个元素
echo $array[2];
echo "<br>";
上面的代码片段应该产生以下输出:
One
Two
Three
编写上述代码的一种更简洁的方法是使用 foreach
循环遍历数组元素。
$array = ['One', 'Two', 'Three'];
foreach ($array as $element) {
echo $element;
echo '<br>';
}
上面的代码片段应该产生相同的输出,而且它需要更少的代码。
同样,我们也可以使用 for
循环遍历数组元素。
$array = ['One', 'Two', 'Three'];
$array_length = count($array);
for ($i = 0; $i < $array_length; ++$i) {
echo $array[$i];
echo '<br>';
}
在这里,我们使用 for
循环遍历数组中的每个索引,然后回显存储在该索引中的值。 在这段代码中,我们介绍了在处理数组时最终会用到的最重要的函数之一:count
。 它用于计算数组中有多少个元素。
PHP 中的数组类型
在本节中,我们将讨论可以在 PHP 中使用的不同类型的数组。
数值索引数组
具有数字索引的数组属于索引数组的类别。 事实上,到目前为止我们在本文中讨论的示例都是索引数组。
当我们没有明确指定时,数字索引会自动分配。
$array = ['One', 'Two', 'Three'];
在上面的例子中,我们没有为每个项目明确指定索引,所以它会自动用数字索引初始化。
当然,你也可以使用数字索引来创建索引数组,如下面的 PHP 结构片段所示:
$array = [];
$array[0] = 'One';
$array[1] = 'Two';
$array[2] = 'Three';
也可以使用非连续或从零开始的数字键数组,如下例所示:
$array = [];
$array[3] = 'One';
$array[11] = 'Two';
$array[] = 'Three';
$array[-18] = 'Four';
$array[] = 'Five';
print_r($array);
输出结果如下
Array
(
[3] => One
[11] => Two
[12] => Three
[-18] => Four
[13] => Five
)
不要依赖 PHP 中的未知数组来具有顺序数字键,除非我们明确地将其键设置为那样。
关联数组
关联数组类似于索引数组,但我们可以使用字符串值作为数组键。
让我们看看如何定义关联数组。
$employee = [
'name' => 'Jiyik',
'email' => 'jiyik@onmpw.com',
'phone' => '1234567890',
];
或者,我们也可以使用以下语法。
$employee = [];
$employee['name'] = 'Jiyik';
$employee['email'] = 'jiyik@onmpw.com';
$employee['phone'] = '1234567890';
要访问关联数组的值,可以使用索引或 foreach
循环。
$employee = [
'name' => 'Jiyik',
'email' => 'jiyik@onmpw.com',
'phone' => '1234567890',
];
echo $employee['name'];
foreach ($employee as $key => $value) {
echo $key . ':' . $value;
echo '<br>';
}
可以看到,这里我们直接查询得到了名字,然后我们使用foreach循环得到了数组中所有的键值对。
多维数组
在我们目前讨论的示例中,我们使用标量值作为数组元素。 事实上,我们甚至可以将数组作为元素存储在其他数组中——这是一个多维数组。
让我们看一下这个 PHP 数组示例:
$employee = [
'name' => 'Jiyik',
'email' => 'jiyik@onmpw.com',
'phone' => '1234567890',
'hobbies' => ['Football', 'Tennis'],
'profiles' => ['csdn' => 'jiyik', 'sina' => 'onmpw']
];
如大家所见,$employee
数组中的 hobbies 键包含一个爱好数组。 同样,profiles 键包含不同配置文件的关联数组。
让我们看看如何访问多维数组的值。
$employee = [
'name' => 'John',
'email' => 'john@example.com',
'phone' => '1234567890',
'hobbies' => ['Football', 'Tennis'],
'profiles' => ['csdn' => 'jiyik', 'sina' => 'onmpw']
];
// access hobbies
echo $employee['hobbies'][0];
// Football
echo $employee['hobbies'][1];
// Tennis
// access profiles
echo $employee['profiles']['csdn'];
// jiyik
echo $employee['profiles']['sina'];
// onmpw
如大家所见,可以使用每个数组部分中该元素的索引或键访问多维数组的元素。
使用 PHP 解包数组值
从 7.4 版开始,PHP 添加了使用扩展 ...
运算符就地扩展数组的功能。
$plant_eaters = ["Horse", "Goat", "Rabbit"];
$meat_eaters = ["Lion", "Tiger", "Crocodile"];
$animals = ["Dog", ...$plant_eaters, ...$meat_eaters, "Cat"];
print_r($animals);
输出结果如下
Array
(
[0] => Dog
[1] => Horse
[2] => Goat
[3] => Rabbit
[4] => Lion
[5] => Tiger
[6] => Crocodile
[7] => Cat
)
最初,我们只能使用数字键在 PHP 中解压数组值。 但是,PHP 8.1 支持使用字符串键解包数组。 这里有些例子:
$default_colors = ["body" => "red", "heading" => "blue", "sidebar" => "yellow"];
$user_colors = ["body" => "white", "paragraph" => "black"];
$theme_colors = [...$default_colors, ...$user_colors];
print_r($theme_colors);
上述代码执行结果如下
Array
(
[body] => white
[heading] => blue
[sidebar] => yellow
[paragraph] => black
)
我们应该注意,以这种方式解包数组会导致覆盖存储在基于字符串的键中的现有值,而数字键只会重新编号。 在上面的示例中,在 $default_colors
之前解压 $user_colors
会在 $theme_colors
数组中将 body 键的值设置为“red”。
一些有用的 PHP 数组函数
在本节中,我们将介绍一些经常用于数组操作的有用数组函数。
count() 函数
count()
函数用于计算数组中元素的数量。 如果我们想使用 for 循环迭代数组,这通常很有用。
$array = ['One', 'Two', 'Three'];
echo count($array);
但是,在使用 for 循环遍历数组时应该小心。 这是因为无法保证数组中的数字键始终是连续的、从零开始或按简单的升序排列。
is_array() 函数
这是处理数组最有用的函数之一。 它用于检查变量是数组还是其他数据类型。
$array = ['One', 'Two', 'Three'];
// 检查变量是否为数组
if (is_array($array))
{
// 执行一些数组操作
}
如果不确定数据类型,则应始终在执行任何数组操作之前使用此函数。
in_array() 函数
如果我们想检查数组中是否存在某个元素,可以使用 in_array()
函数。
$array = ['One', 'Two', 'Three'];
// 检查变量是否为数组
if (in_array('One', $array))
{
echo 'Yes';
}
else
{
echo 'No';
}
in_array()
函数的第一个参数是要检查的元素,第二个参数是数组本身。
explode() 函数
explode()
函数将字符串拆分为多个部分,并将其作为数组返回。 例如,假设我们有一个以逗号分隔的字符串,并且我们希望以逗号分隔它。
$string = "One,Two,Three";
// 用逗号分解字符串
$array = explode(",", $string);
// 输出应该是一个数组
echo '<pre>';
print_r($array);
输出结果如下
Array
(
[0] => One
[1] => Two
[2] => Three
)
explode()
函数的第一个参数是分隔符字符串(我们要拆分的字符串),第二个参数是字符串本身。
implode() 函数
这与 explode()
函数相反——给定一个数组和一个粘合字符串,implode()
函数可以通过将数组的所有元素与它们之间的粘合字符串连接起来来生成一个字符串。
$array = ['One', 'Two', 'Three'];
$string = implode(",", $array);
// 输出应该是一个字符串
echo $string;
implode()
函数的第一个参数是粘合字符串,第二个参数是要内爆的数组。
array_push() 函数
array_push()
函数用于将新元素添加到数组的末尾。
$array = ['One', 'Two', 'Three'];
array_push($array, 'Four');
echo '<pre>';
print_r($array);
输出结果如下
Array
(
[0] => One
[1] => Two
[2] => Three
[3] => Four
)
第一个参数是一个数组,随后的参数是将添加到数组末尾的元素。
array_pop() 函数
array_pop()
函数从数组末尾删除一个元素。
$array = ['One', 'Two', 'Three'];
$element = array_pop($array);
echo '<pre>';
print_r($array);
输出结果如下
Array
(
[0] => One
[1] => Two
)
array_pop()
函数返回从数组中删除的元素,因此我们可以将其拉入变量。 与 array_push()
一起,此函数可用于实现堆栈等数据结构。
array_slice() 函数
当我们想提取给定数组的某些部分时,array_slice()
函数很有用。 它接受四个参数:数组、要切片的索引、要切片的元素数以及是否保留数字键。 该函数将始终保留字符串键,而不管第四个参数如何。
$people = ["Adam", "Amanda", "Andrew", "Laura", "Monty", "Sally", "Sajal", "Steven"];
$members = array_slice($people, 2, 4);
print_r($members);
输出结果如下
Array
(
[0] => Andrew
[1] => Laura
[2] => Monty
[3] => Sally
)
偏移值也可以是负数。 在这种情况下,切片位置将从数组的末尾开始确定。
array_splice() 函数
array_splice()
函数在您想摆脱数组的一部分和/或用其他东西替换它时很有用。 它还接受四个参数:数组、开始删除的偏移索引、要删除的长度以及删除值的可选替换。
$all_items = ["Charger", "Keyboard", "Smartphone", "Baseball", "Bat", "Mouse"];
$replacements = ["Pen", "Headphones"];
array_splice($all_items, 3, 2, $replacements);
print_r($all_items);
输出结果如下
Array
(
[0] => Charger
[1] => Keyboard
[2] => Smartphone
[3] => Pen
[4] => Headphones
[5] => Mouse
)
就是这样——现在大家知道 PHP 中的数组是什么了!
这就是开始在 PHP 中使用数组进行编码所需了解的全部内容。 大家了解了如何创建数组以及如何从中检索元素。 也了解了 PHP 中不同类型的数组,并了解了一些用于处理数组的最有用的内置 PHP 函数。
相关文章
使用 PHP MySQLi 函数获取最后插入的 ID
发布时间:2023/05/09 浏览次数:85 分类:MySQL
-
本篇文章简要介绍了 PHP mysqli() 函数并演示了如何使用它从 MySQL 数据库中获取最后插入的 ID。它是一个名为 mysqli 的 MySQL 驱动程序扩展版本,
在 C 语言中获取字符数组的长度
发布时间:2023/05/07 浏览次数:166 分类:C语言
-
本文演示了如何在 C 语言中获取一个 char 数组的长度。使用 sizeof 运算符来查找字符数组的长度 数组的大小可以用 sizeof 运算符计算,而不考虑元素的数据类型。
如何在 C 语言中获取数组的大小
发布时间:2023/05/07 浏览次数:92 分类:C语言
-
本教程介绍了 C 语言中确定数组大小的方法。本教程介绍了在 C 语言中使用 sizeof()运算符的方法。
C 语言中复制字符数组
发布时间:2023/05/07 浏览次数:117 分类:C语言
-
本文介绍了如何在 C 语言中复制字符数组。使用 memcpy 函数在 C 语言中复制一个字符数组 char 数组可能是 C 代码中最常用的数据结构,复制数组内容是它的核心操作之一。
Django ArrayField 数组字段
发布时间:2023/05/04 浏览次数:168 分类:Python
-
在本文中,我们将学习在 Django 数据库模型中使用 ArrayFields。Django中的ArrayField类似于Java、C、C++等其他编程语言中的数组数据结构,存储相同数据类型的多个值。
计算 Java 数组中的重复元素
发布时间:2023/05/01 浏览次数:202 分类:Java
-
本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。
在 PHP 中使用 MongoDB 作为文件存储
发布时间:2023/04/20 浏览次数:133 分类:MongoDB
-
在为大文件创建可扩展存储方面,MongoDB 及其 GridFS(使用 MongoDB 查询语言 - MQL 编写)是市场上最好的文件存储解决方案之一。 在本教程中,您将学习如何在 PHP 中使用 MongoDB 作为文件存储。