PHP数组详解.docx
- 文档编号:3006865
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:8
- 大小:20.47KB
PHP数组详解.docx
《PHP数组详解.docx》由会员分享,可在线阅读,更多相关《PHP数组详解.docx(8页珍藏版)》请在冰豆网上搜索。
PHP数组详解
PHP数组详解
3.1什么是数组
一个标量变量就是一个用来存储数值的命名区域。
同样,一个数组就是一个用来存储一系列变量值的命名区域,因此,可以使用数组组织标量变量。
存储在数组中的值称为数组元素。
每个数组元素有一个相关的索引(也称为关键字),它可以用来访问元素。
在大多数编程语言中,数组都具有数字索引,而且这些索个通常是从0或1开始的。
3.2数字索引数组
在PHP中,数字索引的默认值是从0开始的,当然也可以改变它。
3.2.1数字索引数组的初始化
$porducts=array('Tires','Oil','SparkPlugs');
就像echo语句一样,array()实际上是一个语言结构,而不是一个函数。
根据对数组内容的需求不同,可能不需要再像以上例子一样对它们进行手工的初始化操作。
如果所需数据保存在另一个数组中,可以使用运算符“=”简单地将数组复制到另一个数组。
如果需要将按升序排列的数字保存在一个数组中,可以使用range()函数自动创建这个数组。
如下这行代码将创建一个从1到10的数字数组:
$numbers=range(1,10);
range()函数具有一个可选的第三个参数,这个参数允许设定值之间的步骤。
例如,如需建立一个1到10之间的奇数数组,可以使用如下代码:
$odds=range(1,10,2);
range()函数也可以对字符进行操作,如:
$letters=range('a','z');
3.2.2访问数组的内容
要访问一个变量的内容,可以直接使用其名称。
如果该变量是一个数组,可以使用变量名称和关键字或索引的组合来访问其内容。
关键字或索引将指定我们要访问的变量。
索引在变量名称后面用方括号括起来。
在默认的情况下,0元素是数组的第一个元素。
请注意,虽然PHP的字符串解析功能非常强大和智能,但是可能会引起混淆。
当你将数组或其他变量嵌入双引号中的字符串时,如果不能正确解释它们,可以将它们放置在双引号之外,或者查找第4章的“字符串操作与正则表达式”获得更复杂的语法。
就像PHP的其他变量一样,数组不需要预先初始化或创建。
在第一次使用它们的时候,它们会自动创建。
3.2.3.使用循环访问数组
由于数组使用有序的数字作为索引,所以使用一个for循环就可以很容易地显示数组的内容。
for($i=0;$i<3;$i++)
echo"$products[$i]";
使用一个简单的循环就可以访问每个元素是数字索引数组的一个非常好的特性。
也可以使用foreach循环,这个循环语句是专门为数组而设计的。
如:
foreach($productsas$current)
echo$current.'';
3.3使用不同索引的数组
PHP还支持相关数组。
在相关数组中,可以将每个变量值与任何关键字或索引关联起来。
3.3.1初始化相关数组
如下所示的代码可以创建一个以产品名称作为关键字、以价格作为值的相关数组:
$prices=array('Tires'=>100,'Oil'=>10,'SparkPlugs'=>4);
关键字和值之间的符号只是一个大于号与等于符号。
3.3.2访问数组元素
同样,可以使用变量名称和关键字来访问数组的内容。
例如$prices['Tires']。
3.3.3使用循环语句
因为相关数组的索引不是数字,因此无法在for循环语句中使用一个简单的计数器对数组进行操作。
但是可以使用foreach循环或list()和each()结构。
当使用foreach循环语句对相关数组进行操作时,foreach()循环具有不同的结构。
可以按如下方式使用关键字:
foreach($pricesas$key=>$value)
echo$key.'=>'.$value.'
';
如下所示的代码将使用each()结构打印$prices数组的内容:
while($element=each($prices))
{
echo$element['key'];
echo'-';
echo$element['value'];
echo'
';
}
each()函数将返回数组的当前元素,并将下一个元素作为当前元素。
因为在while循环中调用each()函数,它将按顺序返回数组中每个元素,并且当它到达数组末尾时,循环操作将终止。
在这段代码中,变量$element是一个数组。
当调用each()时,它将返回一个带有4个数值和4个指向数组位置的索引的数组。
位置key和0包含了当前元素的关键字,而位置value和1包含了当前元素的值。
虽然这与选哪一种方法没什么不同,但我们选择了使用命名位置,而不是数字索引位置。
此外,还有一种更为高级和常见的方式来完成相同的操作。
函数list()可以用来将一个数组分解为一系列的值。
可以按照如下方式将函数each()返回的两个值分开:
list($product,$price)=each($price);
以上代码使用each()从$prices数组中取出当前元素,并且将它作为数组返回,然后再指向下一个元素。
它还使用list()将从each()返回的数组中所包含0、1两个元素变为两个名为$product和$price的新蛮量。
我们可以循环遍历整个$prices数组,使用如下所示的简短脚本显示它的内容:
while(list($prodct,$pirce)=each($prices))
echo"$product-$price
";
这段代码的输出结果与前面脚本的输出结果相同,但它更容易阅读,因为list()允许为新变量命名。
需要注意的一点是,当使用each()函数时,数组将记录当前元素。
如果希望在相同的脚本中两次使用该数组,就必须使用函数reset()将当前元素重新设置到数组开始处。
要再次遍历prices数组,可以使用如下所示的代码:
reset($prices);
while(list($product,$price)=each($prices))
echo"$product-$price
";
3.4数组操作符
+联合,==等价,===恒等,!
=不等价,<>不等价,!
==不恒等。
联合操作符尝试将$b中的元素添加到$a的末尾。
如果$b中的元素与$a中的一些元素具有相同的索引,它们将不会被添加。
即$a中的元素将不会被覆盖。
3.5多维数组
数组不一定就是一个关键字和值的简单列表——数组中的每个位置还可以保存另一个数组。
使用这种方法,可以创建一个二维数组。
可以把二维数组当成一个矩阵,或者是一个具有宽度和高度或者行和列的网络。
3.6数组排序
3.6.1使用sort()函数
sort()函数是区分字母大小写的。
所有的大家字母都在小写字母的前面。
所以‘A’小于‘Z’,而'Z'小于‘a’。
该函数的第二个参数是可选的。
这个可选参数可以传递SORT_REGULAR(默认值)、SORT_NUMERIC或SORT_STRING。
指定排序类型的功能是非常有用的,例如,当要比较可能包含有数字2和12的字符串时。
从数学角度看,2要小于12,但是作为字符串,‘12’却要小于‘2’。
3.6.2使用asort()函数和ksort()函数对相关数组排序
函数asort()根据数组的每个元素值进行排序。
ksort()函数是按关键字排序而不是按值排序。
3.6.3反向排序
函数rsort()将一个一维数字索引数组按降序排序。
函数arsort()将一个一维相关数组按每个元素值的降序排序。
函数krsort()针根据数组元素的关键字将一维数组按照降序排序。
为了访问一个一维数组中的数据,需要使用数组的名称和元素的索引,除了一个元素具有两个索引——行和列外,二维数组和一维数组是类似的。
可以使用双重for循环来实现同样的效果:
for($row=0;$row<3;$row++)
{
for($column=0;$column<3;$column++)
{
echo'|'.$products[$row][$column];
|
echo'|
';
}
如果对一个大数组使用这种代码,那么将简洁得多。
你可能更喜欢创建列名称来代替数字。
可以使用如下代码:
$products=array(array('Code'=>'TIR','Descrīption'=>'Tires','Price'=>100),array('Code'=>'OIL','Descrīption'=>'Oil','Price'=>10),array('Code'=>'SPK','Descrīption'=>'SparkPlugs','Price'=>4)};
如果希望检索单个值,那么使用这个数组会容易得多。
请记住,将所描述的内容保存到用它的名称命名的列中,与将其保存到所谓的第一列中相比,前者更容易记忆。
使用描述性索引,不需要记住某个元素是存放在[x][y]位置的。
使用一对有意义的行和列的名称作为索引可以使用你很容易找到所需的数据。
然后,我们却不能使用一个简单的for循环按顺序遍历每一列。
可以使用for循环遍历外部的数字索引数组$products。
$products数组的每一行都是一个具有描述性索引的数组。
在while循环中使用each()和list()函数,可以遍历整个内部数组。
因此,需要一个内嵌有while循环的for循环。
for($row=0;$row<3;$row++}
{
while(list($key,$value)=each($products[$row]))
{
echo"|$value";
}
echo'|
';
}
三维数组具有高、宽、深的概念。
如果能轻松地将一个二维数组想像成一个有行和列的表格,那么就可以将三维数组想像成一堆像这样的表格。
每个元素可以通过层、行和列进行引用。
根据创建多维数组的方法,可以创建四维、五维或六维数组。
在PHP中,并没有设置数组维数的限制,但人们很难设想一个多于三维的数组。
大多数的实际问题在逻辑上只需要使用三维或者更少维的数组结构就可以了。
3.7多维数组的排序
对多于一维的数组进行排序,或者不按字母和数字的顺序进行排,要复杂得多。
PHP知道如何比较两个数字或字符串,但在多维数组中,每个元素都是一个数组。
PHP不知道如何比较两个数组,所以需要建立一个比较它们的方法。
在大多数情况下,单词和数字的顺序是显而易见的——但对于复杂的对象,问题就会多一些。
3.7.1用户定义排序
usort()中的“u”代表“user”,因为这个函数要求传入用户定义的比较函数。
asort和ksort对应的版本uasort()和uksort()也要求传入用户定义的比较函数。
类似于asort(),当对非数字索引数组的值进行排序时,uasort()才会被使用。
如果值是简单的数字或文本则可以使用asort。
如果要比较的值像数组一样复杂,可以定义一个比较函数,然后使用uasort()。
类似于ksort(),当对非数字索引数组的关键字进行排序时才使用uksort()。
如果值是简单的数字或文本就使用ksort。
如果要比较的对象像数组一样复杂,可以定义一个比较函数,然后使用uksort()。
3.7.2反向用户排序
函数sort()、asort()和ksort()都分别对应一个带字母“r”的反向排序函数。
用户定义的排序没有反向变体,但可以对一个多维数组进行反向排序。
3.8对数组进行重新排序
3.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 数组 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)