PHP中的数组详细指南
美好的一天!
这是Fast PHP文章系列的另一篇文章 。 今天我们要讨论ARRAYS 。 我们将学习其语法,不同类型,不同的内置数组函数,帮助执行与数组相关的不同任务,快速而不同的实例解释了在PHP中使用数组。
在本文末尾,您应该能够:
- 定义数组
- 使用不同类型的数组
- 使用与数组相关的不同内置函数,例如list(),each(),var_dump,print_r,var_export()
- 使用数组编写基本以及复杂的PHP代码。
- 使用多维数组
- 借助不同的例子了解Foreach循环
但是在我们讨论数组之前,让我告诉你一个非常有趣的故事。
我的办公室附近有一个DVD商店,保存着非常好的英文电影。 你可以在几乎所有类型的电影中找到电影,例如动作电影,恐怖片,浪漫电影(hhhhh - “深呼吸”),戏剧,舞台剧,宗教电影等。
店主不是一个受过良好教育的人,但他仍然能够很容易地管理20,000张DVD,他可以在你说出这个名字的时候拿出电影,呃,关键是他怎么做?
那么,我分析了他的策略,让我透露一个很大的秘密,用一种特殊的方法来组织一些物品,以轻松处理它们。
他已经将所有的DVD分类到不同的类型,如上所述,并给他的商店的不同的货架上提供了特殊的ID /代码/号码。 他把相关的电影放在同一个货架上。 每个货架都标有类别名称,例如浪漫电影,恐怖电影等...每张DVD都有一个唯一的ID,可以用来跟踪该DVD。
当一个客户要求一个电影说双人团队时,他迅速移动到标有动作电影的架子上,然后将ROW标示为“D”,这意味着以“D”开始的电影名称,然后迅速达到“D” '后跟'O',并进入DOUBLE TEAM电影。 他记得着名的DVD的ID,所以当你问他他会告诉你从这个名称标签的货架上挑选DVD#xxxx,你可以从那里直接挑选。
所有这一切都是如此迅速地完成,似乎很神奇地从一个巨大的收藏得到一个特定的DVD这么快。 所以如果你开始运行一个DVD商店,那么请执行以下操作来组织您的DVD:
a)将类似的DVD放在同一个架子上。
b)按其名称标记每个类别。
c)标记DVD的ROWS。
d)为所有DVD分配ID。
让我们嘲笑这个故事的道德,并回到电脑世界。
在编程中有时您必须处理不同的相关值,它们以不同的方式绑定在一起。 例如五大学生姓名,保时捷车型,从表单等提交的变量。 在这种情况下,您需要组织您的代码和逻辑来高效,快速地处理类似的数据。 为此,您可以使用DVD销售商的逻辑:
1)将数据组织成不同的有界类别。
2)关注ROWS。
3)为每个数据值分配唯一ID。
这可能有不同的技术,其中一个是阵列。
数组的原始定义:可以帮助您将相似兴趣相似的数据/数据保存在一起,从而更好地进行组织和处理
适当的数组定义:
“收集相同标签下的不同变量以保持价值组织和易于处理”
是的,这是我自己对数组的定义,只要核心概念是正确的,我可以自己定义任何东西,你可以明白我在说什么。
虽然有些还将数组定义为“它本身包含更多变量的变量”。
请记住,PHP以一种稍微不同的方式处理正常的变量和数组。
数组语法:
$arrayName = array (”value1?,”value2?,”value3?);
我们使用$
sign来给出一个数组名称,就像我们对变量一样,然后是一个等号,然后是关键字'array',告诉解析器我们正在使用数组,然后在括号内加上不同的值,每个值都用双引号括起来用逗号
PHP定义和打印数组的示例:
<?php
$Top3Sites = array ("fastcreators.com","youcl.com","scriptsbible.com");
print_r($Top3Sites);
?>
上述程序的输出将是。
Array
(
[0] => fastcreators.com
[1] => youcl.com
[2] => scriptsbible.com
)
请注意,我们使用print_r
来打印数组,因为您可以使用echo
或print
来显示数组中的单个项目,因为您无法使用回显
或打印
功能打印数组(均用于显示输出),例如:
echo $Top3Sites[0]; //fastcreators.com
请记住,索引号从0开始,而不是1。
数组的每个值都获得一个唯一的ID,称为INDEX NUMBER。
另一种方法可能是定义三个不同的变量,然后分配它们的值并使用不同的语句来显示它们。 为了争论,在三个值的情况下可以接受,但是当我们处理五百或一百个值时,它们将被拒绝。
因此,阵列更有条理,可用于收集相同标签下的不同值以进行快速处理。
在上面的例子中,我们在一个步骤中定义了值并将其分配给数组,但您也可以按如下方式进行操作:
<?php
$students = array(); //just define an array
//assigning values
$students[0] = "Haroon";
$students[1] = "Celine";
$students[3] = "Jennifer";
$students[4] = "Bobby";
?>
数组类型:
PHP中有三种不同类型的数组:
a)数字数组:具有数字ID键的数组。
b)关联数组:每个ID键与一个值相关联的数组。
c)多维数组:包含一个或多个数组的数组。
现在我们详细讨论不同类型的数组。
数字数组:数字数组使用整数/数字作为其索引号来标识数组的每个项目。 我们上面讨论的例子是数字数组,因为它们具有整数值作为每个项目的索引号。
<?php
$colours = array("white","black","blue");
print_r($colours);
/*
output will be
Array
(
[0] => white
[1] => black
[2] => blue
)
*/
?>
在上面的输出中,您可以看到白色,黑色和蓝色的索引号分别为0,1,2,它们是数值,因此我们称之为数组数组 。
关联阵列:
有时最好使用索引名称而不是索引号,例如,如果要保存三个学生的姓名和号码,那么最好的选择是将每个学生的姓名作为数组的索引值和数字作为值,在下面的例子中,
<?php
$students['Anna'] = 90;
$students['Maria'] = 60;
$students['Jennifer'] = 40;
?>
当您使用POST或GET方法提交表单时,您将在接收页面上获得一个类似的关联数组,其中包含每个表单字段的名称作为数组索引,其值作为索引值。 尝试使用一些字段的HTML表单并发布,并在接收页面上打印全局数组
print_r($_POST);
print_r($_GET);
你会看到关联数组。
关联数组更容易处理和处理信息,特别是处理复杂表单提交和数据库中的动态值。
多维数组:
多维数组可以包含其本身内的数组,子数组在其中包含更多的数组。
让我们转向一个真实世界的例子来了解多维数组的概念:
大卫有两个儿子里奇和梅森。 Richie有两个呃Sue和Natasha,而Mason有三个女儿Nichole,Salma和Amber。
现在他们的家谱如下:
如果我们要在PHP中显示一个多维数组的David的家谱,那么我们可以定义一个如下的数组:
$david = array
(
“richie”=>array
(
“Sue”,
“Natasha”
),
“Mason”=>数组
(
“Nichole”,
“萨尔玛”,
“琥珀色”
)
);
这是如何使用多维数组来组织数据。 尝试提交一个表单域数组,然后打印全局数组以检查输出,您将获得全局数组作为多维数组,其中将包含更多的子数组。
FOREACH LOOP:如果你记得我最后一篇关于“ PHP循环 ”的文章,我已经离开了FOREACH LOOP以便稍后讨论,现在到了讨论的时候了。
Foreach循环用于数组从数组中获取每个下一个值,并执行其上需要的任何操作。
foreach循环的基本语法如下:
FOREACH语法:
foreach ( $arrayname as $temporaryVarName ) {
// foreach loop body
//$temporaryVarName holds the array values and
//on each loop-run it will pick the next available value from the array
}
让我们用一个foreach循环来编写一个程序来了解它的工作深度:
<?php
$students = array(); // define array students
//assigning values
$students[0] = "david";
$students[1] = "kevin";
$students[2] = "julie";
$students[3] = "nayyar";
/*
now we will use the foreach loop to display all the students names i.e the array values in one go
*/
foreach ( $students as $std_name ) {
echo $std_name . "\n";
}
?>
在上面的代码中, $ std_name
用作临时变量来获取数组的每个值。 在每个循环运行时,数组的下一个可用值覆盖$ std_name
的现有值,然后$ std_name
指向当前获取的值。 所以它就像一个接一个地走过你的数组值。
以上代码的输出将是:
david
kevin
julie
nayyar
因为我们正在使用\ n
(换行符)在下一行显示每个名称。
当没有可用的值可用时,foreach循环终止,这是我们遇到的NAYYAR
数组的最后一个值。
您可以随时使用break
语句(如果需要)打破循环(我们已经在PHP中使用决定中使用决定讨论了break
语句)。
例如,如果你想打破循环,如果名字是julie,
那么你可以在上面的代码中包含一个IF语句如下:
<?php我们有一些其他非常方便的功能,可以与数组一起工作,为您提供快速处理数组以提供有效的结果。下面讨论其中的几个:
foreach ( $students as $std_name ) {
if($std_name == "julie") break;
echo $std_name . "\n";
}
?>
重要阵列功能:
1)保存print_r函数的输出:我们以前用print_r
来显示数组值,尽管我们可以给print_r
添加一个额外的参数,并将其输出保存到一个变量中,例如:
<?php
$myarray = array("Apples", "Oranges", "Pears");
$output = print_r($myarray, true);
print $output;
?>
如果不使用TRUE
, print_r
将显示数组本身 - 否则,如果提供TRUE
,它将将其输出存储在变量中。
2)如何找到数组的大小? 数组的大小意味着数组包含多少个值...如果要查找可以使用COUNT
函数的数组的值,如下所示:
<?php
$myarray = array("Apples", "Oranges", "Pears");
$size = count($myarray);
print $size; // 3
?>
上面的程序将显示3,因为我们在数组中有三个元素。
3)var_dump函数:
与print_r()
有类似的功能,它是var_dump()
。 它在很大程度上是一回事,但是
a)打印出变量的大小,
b)不打印对象中的非公开数据,
c)没有选择传递第二个参数来返回其输出。
例如,更改使用var_dump()
而不是print_r()
的第一个脚本将给出以下输出:
array(3) {
[0]=>
string(6) “Apples”
[1]=>
string(7) “Oranges”
[2]=>
string(5) “Pears”
}
在那里你可以看到var_dump()
告诉我们,数组有三个值,并打印出每个字符串的长度。 为了教学目的, var_dump()
更好,因为它显示了可变大小,但是您可能希望在自己的工作中使用print_r()
。
4)var_export功能:
另外还有var_export()
函数,它类似于var_dump()
和print_r()
。 然而,与var_export()
的主要区别在于它可以用作PHP代码的样式打印变量信息。 例如,如果我们在测试脚本中使用var_export()
而不是print_r()
,那么它将输出以下内容:
array (
0 => ‘Apples’,
1 => ‘Oranges’,
2 => ‘Pears’,
)
请注意,在最后一个元素后面有一个逗号,但是这被PHP忽略,您可以将该信息直接复制并粘贴到您自己的脚本中,如下所示:
<?php
$foo = array (
0 => 'Apples',
1 => 'Oranges',
2 => 'Pears',
);
?>
5)array_shift功能:
array_shift
函数从数组中删除数组的第一个元素并将其存储在接收变量中。
例如,如果我想从以前的程序中使用的数组中删除苹果并将其存储在一个不同的变量中,那么我可以编写一个如下的程序:
<?php
$myarray = array("Apples", "Oranges", "Pears");
$fruit = array_shift($myarray);
echo $fruit; // Apples
print_r($myarray); // Oranges and Pears will be displayed without Apples
?>
如果您有一个从表单发布的多维数组,并且您想要从主数组中获取子数组,那么这是非常方便的功能。 但是请记住,当您使用array_shift
从主数组中获取子数组时,接收变量(以前的$ fruit
)将不是一个普通变量,而是一个数组。
我还建议您在“PHP官方手册”中研究与array_shift相关的其他三个有用的功能
array_unshift
array_pop
array_push
PHP提供了一个很长的列表,您可以在PHP官方手册中找到不同的有用的数组函数。
我想在这里提到的一件事是,foreach循环不是处理数组的唯一方法 - 你可以使用其他循环,例如FOR LOOP或者list()
和each()
函数。
要处理数组,您将需要找到数组中的值的总数,即数组的大小如下所示:
<?php
for ($i = 0; $i < count($array); ++$i) {
print $array[$i];
}
?>
对于具有整数值作为索引号的数字数组,这不适用于关联数组。
具有LIST()函数的进程数组:
PHP提供了LIST()
函数,可以轻松快速地浏览数组值,如下所示:
<?php
while (list($var, $val) = each($array)) {
print "$var is $val\n";
}
?>
List()
是一个与array()
相反的函数
- 它需要一个数组,并将其转换为单个变量。 Each()
将一个数组作为其参数,并返回该数组中的当前键和值,然后再推进数组游标。 “Array cursor”是当前正在读取的数组元素的技术术语。 所有的数组都有一个游标,你可以自由地移动它 - 它被用在上面的while循环中,我们需要遍历一个数组。 首先, each()
将返回第一个元素,然后返回第二个元素,然后是第三个元素,依此类推,直到找到没有元素为止,在这种情况下,它将返回false
并结束循环。
第一行的含义是“获取数组中的当前元素,并将其键分配给$ var
并将其值设置为$ val
,然后提升数组游标”。
获取数组元素的索引和值:如果要读取索引名称及其每个数组元素的值,则可以使用foreach循环,如下所示:
<?php
foreach ($array as $key => $val) {
print "$key = $val\n";
}
?>
处理关联数组时非常方便。
数组是一个非常深刻的话题,它有更多的讨论,甚至我可以很容易地写一个完整的书只在阵列上。 但是本文的目的是让您非常了解数组和不同的方法来存储和处理数组中的信息。 但是,如果您有任何有关数组的具体问题,请随时给我发送电子邮件或对本文发表评论。
这是一篇很长的文章,所以如果你发现有任何请报告给我,以便我可以修复它可能会有一些打字错误。 直到我们再见面,继续练习和照顾...
- 哈罗·艾哈迈德
本系列其他文章:
FAST PHP教程(第1部分)
如何在Windows上安装PHP(快速PHP教程第2部分)
如何在Linux上安装PHP
如何在Windows上安装Apache
简单的安装程序在Windows上安装PHP,MySQL,Apache
PHP编程基础
PHP中的运算符
使用IF-ELSE在php中的决策
使用PHP切换语句进行决策
循环在PHP