二、数组和循环
在上一章中,我们介绍了变量和数据类型以及不同的运算符。我们还介绍了如何使用条件控制程序流。在本章中,我们将重点介绍如何使用数组存储多个值,以及如何使用循环控制流。数组的基本思想是它是一种变量类型,允许在一个container
中存储多个项目。
例如,如果您想在同一个变量下存储在一家公司工作的所有员工的姓名,则可以使用数组来帮助您做到这一点。当我们想要多次运行同一代码块时,就会使用循环。这通过重用预定义的代码块为开发人员节省了大量工作。这两个概念是当今几乎所有基于 PHP 的 web 应用和 web 站点的核心。
在本章结束时,您将能够:
- 实现一维和多维数组
- 识别索引数组和关联数组之间的差异
- 在阵列上执行不同的操作
- 实现各种类型的循环
阵列
在本节中,我们将讨论各种类型的阵列,然后介绍它们的一些常见操作。
索引数组
索引数组是您将看到的最常见的数组类型,它们可以定义为预填充数组或空数组。
空数组可以定义如下:
<?php
$the_array = array();
?>
注
注意,$the_array
是一个变量。您可以使用您喜欢的任何其他变量。
使用快捷方式语法的另一种方法:
<?php
$the_array = [];
?>
如果您想启动一个带有值的数组,可以按如下操作:
<?php
$students = array("Jill", "Michael", "John", "Sally");
?>
当您使用预先填充的值初始化数组时,每个元素都会从 0 开始获得一个数字索引。因此,在前面的示例中,吉尔的索引为 0,迈克尔的索引为 1,约翰的索引为 2,莎莉的索引为 3。
为了打印出students
数组的第一个索引,您可以使用以下代码:
<?php
echo $students[0];
?>
通常,当您使用数组时,您希望在整个程序过程中添加到该数组中。此可通过以下两种方式之一完成:
append
快捷方式:
<?php
$students[] = "Tom";
?>
或array``push
功能:
<?php
array_push($students, "Tom", "Joey");
?>
通常,开发人员使用快捷方式方法;如果要一次将多条记录推送到一个数组中,可以使用array_push
功能。
有时,数组中有一个元素需要删除。要从数组中删除元素,请使用unset
函数。在以下示例中,我们从数组中删除“Tom”:
<?php
unset($students[4]);
?>
在继续之前,我们将讨论的最后一部分是更新元素。为此,请执行以下操作:
<?php
$students[0] = "Jessie";
?>
关联数组
接下来是关联数组,通常称为键值对。使用关联数组,可以使用基于文本的键来存储值,这在特定情况下可能会有所帮助。例如,如果我们从前面的示例中选取一个学生(在本例中为 Michael),我们可以存储他的age
、gender
和favorite color,
,如下所示:
<?php
$michael = array(
"age" => 20,
"gender" => "male",
"favorite_color" => "blue"
);
?>
如果需要访问数组中的特定值,可以使用key
。例如,如果要打印 Michael 的年龄,可以执行以下操作:
<?php
echo $michael['age'];
?>
将数据添加到associative
数组与将数据添加到索引数组一样简单。您可以简单地使用该键并指定一个值。假设我们想在 Michael 的数组中添加一个职业:
<?php
$michael["occupation"] = "sales associate";
?>
要从关联数组中删除元素,请执行与indexed
数组相同的步骤,但这次使用键。
让我们删除在最后一步中添加的职业:
<?php
unset($michael['occupation']);
?>
使用阵列
在本节中,我们将包括name
、age
、location
和education level
。遵循以下步骤:
- 打开代码编辑器并创建一个新文件
arrays.php.
-
在新文件中,创建打开和关闭
php
标记:php <?php ?>
-
现在,我们将创建一个名为
$myinfo,
的新变量,并使用一个新数组对其进行初始化:```php <?php $myinfo = array(); ?>
```
-
然后,我们将用我们的
name
、age
、location
和education level
填充新阵列。 -
接下来,我们将打印数据:
```php <?php $myinfo = array("John", 25, "USA", "College"); echo "My name is " . $myinfo[0] . "\n"; echo "I am ". $myinfo[1] . " years old. \n"; echo "I live in " . $myinfo[2] . "\n"; echo "My latest education level is " . $myinfo[3]; ?>
```
-
在终端中打开您的工作目录,键入以下命令:
php php arrays.php
您将获得以下输出中显示的结果:
My name is John.
I am 25 years old.
I live in USA.
My latest education level is College.
将字符串转换为数组
有时,在构建基于 PHP 的应用时,您不会使用预定义的数据集实例化数组,例如,在构建实用程序脚本时就是这样。假设您有一个文件名为字符串版本的变量,并且希望获得不带扩展名的文件名。使用explode
功能可以轻松完成此任务。explode
函数接受两个参数:分隔符和要转换为数组的字符串。Explode
函数有两个参数:
<?php
$filename = "myexamplefile.txt";
$filename_parts = explode(".", $filename);
echo "Your filename is " . $filename_parts[0];
?>
在前面的示例中,我们定义了一个 filename 变量,然后使用 explode 函数,使用句点分隔符将字符串拆分为多个部分。$filename_parts
变量包含两个元素的数组,第一个是字符串myexamplefile
,第二个包含字符串txt
。
知道了这一点,我们可以通过访问字符串部分数组的 0 索引来打印文件名。
将数组合并为字符串
除了explode
函数外,PHP 还为我们提供了一个函数,允许我们执行完全相反的操作:implode
函数。当您想要获取现有数组并将其转换为字符串时,可以使用内爆函数定义分隔符并将其传递给数组;结果将得到一个字符串。
让我们回到explode
示例。假设我们有一个文件名,并希望在将其保存回字符串之前在其末尾附加一些其他字符串:
<?php
$filename = "myexamplefile.txt";
$filename_parts = explode(".", $filename);
$filename_parts[0] .= "_v1";
$filename = implode(".", $filename_parts);
echo "Your new filename is " . $filename;
?>
在前面的代码示例中,我们首先使用 explode 函数将原始文件名分解为几个部分。然后我们访问文件名部分并将字符串 _v1 附加到它的末尾。使用内爆函数,我们使用文件名的各个部分重新组合文件名,最后将其打印回屏幕供用户查看。
切片阵列
另一个array_slice
功能;默认情况下,该函数只需要两个参数,但可以使用四个。两个必需的参数是数组本身和新数组的起点。两个可选参数是新数组的长度(或要包含在其中的元素数)和 preserve 选项。“保留”选项允许您决定当前数组元素是保持不变,还是在拆分后重新排序。下面是一个基本用法示例:
<?php
$fruit = array("apples","grapes", "oranges", "lemons","limes");
$smallerFruitArray = array_slice($fruit, 2);
?>
在前面的示例中,当我们通过array_slice,
运行水果数组时,我们将得到一个包含橙子、柠檬和酸橙的数组。
对数组进行排序
排序是构建特定类型程序的另一个重要工具。在 PHP 中经常看到的排序函数之一是ksort
函数。ksort
允许您将数组作为参数传入,然后按升序排序。
如何使用它的示例如下:
<?php
$people = array("Jessica" => "35", "April" => "37", "John" => "43", "Tom" => 25);
ksort($people);
?>
在前面的示例中,我们有一组人员。一旦您通过ksort
函数设置了人物数组,您应该可以看到按字母顺序排列的姓名。
多维数组
下一种类型是multidimensional
数组。多维数组只是数组中的数组。在前面的数组示例中,我们存储了一个学生的名字。当我们想要为一个特定的学生存储多个细节时会发生什么?这就是多维数组的用武之地。让我们看看如何定义一个学生数组,该数组还存储学生的gender
和favorite``color
:
注
对于完整的代码片段,请打开代码文件中的Lesson 2.php
。
<?php
$students = array(
"Jill" => array(
"age" => 20,
"gender" => "female",
....
"Amy" => array(
"age" => 25,
"gender" => "female",
"favorite_color" => "green"
),
);
?>
如果我们想访问学生的信息,我们可以使用以下键:
<?php
echo $students['Jill']['age'];
?>
上面的例子将打印出吉尔的年龄。对于多维数组,我们更新元素值的方式与使用一维数组时几乎相同。
例如,如果我们想将 Jill 的年龄更改为21,
,我们可以执行以下操作:
<?php
$students['Jill']['age'] = 21;
?>
包括我们现有项目中的一系列爱好
在本节中,我们将对上一个示例进行扩展,以包括一系列爱好:
- 打开代码编辑器并创建一个新文件
multidimensional.php
。 - 在新文件中,创建打开和关闭
php
标记。 -
创建一个名为
$user,
的新变量,并使用一个新数组对其进行初始化:php <?php ?> <?php $user = array(); ?>
-
Populate the new array with two main sections:
info
andhobbies
. In the info array, store thename
,age
,location,
andeducation level
, and in thehobbies
array, we will store three hobbies.注
有关完整的代码片段,请参阅代码文件文件夹中的
Lesson 2.php
文件。php <?php $user = array( "info" => array( "name" => "john", "age" => 27, ... ) ); ?>
-
Next we'll print our data:
注
有关完整的代码片段,请参阅代码文件文件夹中的
Lesson 2.php
文件。```php <?php$user = array( "info" => array( "name" => "john", "age" => 27, "location" => "USA", ..... echo "I live in " . $user["info"]['location'] . ".\n"; echo "My latest education level is " .
$user['info']['education_level']. ".\n";echo "I enjoy " . $user["hobbies"][0] . ", " . $user["hobbies"]
[1] . ", " . $user["hobbies"][2].".\n";
?> ```
-
在终端中打开您的工作目录,输入以下命令:
php php multidimensional.php
您将根据我们在前面的数组中提供的输入得到一个结果。
回路
循环是任何编程语言中的强大工具。它们允许您编写可以根据给定条件执行特定次数的代码。在本节中,您将了解各种可用的循环,例如 for 循环、foreach 循环、while
循环和do-while
循环。
用于循环
我们将从for
循环开始探索循环。它是已知的最复杂的循环结构,当您知道需要一个代码块运行多少次时,就会使用它。for 循环的结构如下所示:
<?php
for(initialized counter; test if true; increment counters){
}
?>
创建for
循环的步骤如下:
- 初始化起始计数变量-通常从
0
开始。 - 提供解析为
true
或false
的评估条件。如果条件为true
,循环将继续,当条件为false
时,循环将退出(或中断)。 - 按特定的数字递增该值。通常,它会增加
1
。
下面是一个完整的例子:
<?php
for($i = 0; $i < 5; $i++) {
echo "Current Count: " . $i;
}
?>
组合回路和阵列
在本节中,我们将探讨如何组合循环和数组。以下是执行此操作的步骤:
- 打开代码编辑器并创建一个新文件
forloop.php.
-
在新文件中,创建打开和关闭
php
标记:php <?php ?>
-
现在,我们创建一个名为
$food,
的新变量,并用一个新数组php <?php $food = array(); ?>
初始化它 4. 然后,我们用食物名称填充新数组:
php <?php $food = array("turkey", "milk", "apples"); ?>
-
Next, we loop through our array and print our data:
```php <?php $food = array("turkey", "milk", "apples");
for($i = 0; $i < count($food); $i++){ echo $food[$i] . "\n";
} ?> ```
注
计数函数返回数组中的元素数。
在终端中打开工作目录,然后键入以下命令:
php php forloops.php
while 循环
我们将探索的下一个循环是 while 循环。while 循环用于循环代码块直到满足特定条件。而循环的定义如下:
<?php
while(condition) {
}
?>
虽然循环非常简单,因为它们只需要一个条件就可以运行。循环将继续,直到条件为 false:
这里有一个简单的例子:
<?php
$count = 1;
while($count < 25){
echo "Count: " . $count . "\n";
$count += 1;
}
?>
我们将前面的count
变量赋值为 1。while
条件检查count
变量是否小于 25,一旦counter
变量等于 25,则会中断。在 while 函数中,我们echo
输出当前计数,然后将count
变量增加 1。
使用 while 功能
在本节中,我们将构建一个while
函数,该函数将在counter
小于 30 时进行迭代。按照以下步骤操作:
- 打开代码编辑器并创建一个新文件
while.php.
-
在新文件中,创建打开和关闭
php
标记:php <?php ?>
-
接下来,我们定义一个
counter
函数并用数字 1 对其进行初始化:php <?php $count = 1; ?>
-
然后,我们可以创建一个
while
循环,该循环将回显当前计数,然后将counter
增加 1:```php <?php
$count = 1; while($count <= 30){ echo "Count " . $count . "\n"; $count++; }
?> ```
-
在终端中打开您的工作目录,键入以下命令:
php php while.php
边做边做
Do while 循环与 while 循环类似,但它们不是在循环开始时运行条件,而是在内部代码块运行后进行检查。其思想是,如果需要代码块至少运行一次,则使用此循环而不是 while 循环。
注
Do while 循环也称为出口控制循环。
Do while 循环表示如下:
<?php
do{
}while(condition);
?>
我们将根据前面的内容修改 while 循环:
<?php
$count = 1;
do{
echo "Count: " . $count . "\n";
}while($count <= 25);
?>
while 循环到 do while 循环的转换
在本节中,我们将复制前面的示例,但是将 while 循环转换为 do-while 循环,这样您就可以看到它们在工作方式上的差异。遵循以下步骤:
- 创建一个新文件并将其命名为
dowhile.php.
- 接下来,打开
while.php
文件,将内容复制到dowhile.php
文件中。 -
我们现在将修改
while
函数,使其类似于以下代码:```php <?php
$count = 1; do{ echo "Count " . $count . "\n"; $count++; }while($count <= 30);
?> ```
-
在终端中打开您的工作目录,输入以下命令:
php php dowhile.php
foreach 循环
foreach 循环是我们列表中的下一个循环。foreach 循环旨在为程序员提供一种简单的方法来迭代数组。此循环仅适用于数组和对象,您将在本书后面部分了解这些内容。此循环有两个语法:
<?php
foreach($array as $value){
}
?>
第一种语法采用给定的数组并遍历数组中的每个元素,将其分配给辅助变量。例如:
<?php
$students = array("Jill", "John", "Tom", "Amy");
foreach($students as $student){
echo $student . "\n";
}
?>
在前面的示例中,我们定义了一个填充有学生姓名的数组。然后,我们使用 foreach 循环迭代我们的students
数组并echo
输出每个名称。
第二种语法编写如下:
<?php
foreach($array as $key => $value){
}
?>
在这个版本的for each
函数中,给定的数组被迭代,但它没有给出单个元素,而是同时给出key
和element
本身。下面是我们将如何使用它的示例:
注
有关完整的代码片段,请参阅代码文件文件夹中的Lesson 2.php
文件。
<?php
$students = array(
"Jill" => array(
"age" => 20,
"favorite_color" => "blue"
),
.....
);
foreach($students as $name => $info){
echo $name . "'s is " . $info['age'] . " years old\n";
}
?>
在本例中,我们定义了一个多维数组,该数组存储每个学生的年龄和喜爱的颜色,并使用学生的姓名编制索引。然后我们使用foreach
函数迭代students
数组,并将每个元素的键分配给name
变量,将学生信息分配给info
变量。在循环中,我们echo
列出了学生的姓名以及他们的年龄。
活动:使用 foreach 循环
让我们将对 for each 循环的理解付诸实践。
您的经理要求您创建一个 PHP 脚本,根据给定的工资计算每个员工每月的收入。
这就是你要做的:
- 创建一个新目录并将其命名为
monthly_payment
。 - 在新目录中,创建一个
index.php
文件。 -
首先,您将定义多维数组,该数组将存储员工的姓名、职务和薪水:
```php <?php
$employees = array( array( "name" => "John Doe", "title" => "Programmer", "salary" => 60000 .... "title" => "Manager", "salary" => 132000 ) ); ?> ```
-
接下来,定义将遍历
employee
数组的foreach
循环:php foreach($employees as $employee){ }
-
最后,添加一个
echo
报表,该报表将打印姓名、职务和计算的月薪:php foreach($employees as $employee){ echo $employee['name'] . "(" . $employee['title'] . ") annual salary is $" . $employee['salary'] . " and earns $" . ($employee['salary'] / 12) . "/mo. \n"; }
计算器脚本现在完成了。如果需要添加其他员工,只需添加一个包含员工信息的附加关联数组即可。
总结
我们已经到了第二章的结尾。在本章中,我们了解了如何声明和定义数组,并介绍了不同类型的数组。我们看到了可以在阵列上执行的各种操作。我们还介绍了控制流语句,如 for 循环、while 循环和 do while 循环。
在下一章中,我们将学习使用函数和类的代码可重用性,使您更接近于构建自己的自定义应用。
版权属于:月萌API www.moonapi.com,转载请注明出处