PHP参考手册.docx
- 文档编号:11099891
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:15
- 大小:23.48KB
PHP参考手册.docx
《PHP参考手册.docx》由会员分享,可在线阅读,更多相关《PHP参考手册.docx(15页珍藏版)》请在冰点文库上搜索。
PHP参考手册
数组
程序员会花很多时间处理成组的相关数据。
例如,公司中所有员工的姓名,所有美国总统及其出生日期,1900年到1975年之间的所有年份。
事实上,数据集的处理如此普遍,以至于所有主流编程语言中都支持一种常见的方式,用以在代码中管理这些数据组。
在PHP这门语言中,这一特性称为数组(array),它提供了一种理想的方法来存储、操作、排序和获取数据集。
什么是数组
传统上把数组(array)定义为一组有某种共同特性的元素,这里的共同特性包括相似性(车模、棒球队、水果类型等)和类型(例如所有元素都是字符串或整数)等,每个元素由一个特殊的标识符来区分,这称为键(key)。
请注意,上面这句话中的传统上一词,因为现在可以摒弃这种定义,数组结构中可以包括完全无关的元素。
PHP则更进一步,数组中的元素甚至可以不属于同一种类型。
例如,一个数组可能包含州名、邮政编码、考试成绩或扑克牌等元素。
每个实体包含两个项:
前面提到的健(key)和值(value)。
可以通过查询键来获取其相应的值。
这些键可以是数值(numerical)键或关联(associative)键。
数值键与值没有真正的联系,它们只是值在数组中的位置。
例如,一个数组中包含按字母顺序排列的美国州名,键0表示Alabama(阿拉巴马州),键49表示Wyoming(怀俄明州)。
使用PHP语法,该数组如下:
$states=array(0=>"Alabama","1"=>"Alaska"..."49"=>"Wyoming");
使用数值索引,可以如下引用第1个州(Alabama):
$states[0];
与此不同的是,关联键与值有一定关系,而不是值在数组中的位置。
使用数值索引值不可行时,以关联的方式来映射数组会特别方便。
例如,你可能希望创建一个将州缩写映射到州名的数组,如OH/Ohio,PA/Pennsylvania和NY/NewYork。
使用PHP语法,该数组如下:
$states=array("OH"=>"Ohio","PA"=>"Pennsylvania","NY"=>"NewYork")
可以如下引用Ohio:
$states["OH"]
还可以创建包含数组的数组,这称为多维数组(multidimensionalarrays)。
例如,可以使用一个多维数组存储美国各州的信息。
使用PHP语法,该数组如下:
$states=array("Ohio"=>array("population"=>"11,353,140","capital"=>"Columbus"),"Nebraska"=>array("population"=>"1,711,263","capital"=>"Omaha"));
然后可以如下引用Ohio的人口:
$states["Ohio"]["population"]
你自然会想知道遍历数组的方法。
无论使用哪一种方法,要记住,它们都依赖于一种称为数组指针(arraypointer)的特性。
数组指针就如同书签,告诉你正在检查的数组位置。
你并不是直接操作数组指针,而是使用内置的语言特性或函数来遍历数组。
但是,理解这个基本概念很有用。
创建数组
与其他很多语言的数组实现方式不同,PHP不需要在创建数组时指定其大小。
事实上,因为PHP是一种松散类型的语言,所以甚至不需要在使用数组前先行声明。
尽管没有限制,PHP仍提供了正式和非正式的数组声明方法。
两个方法各有优点,都值得学习。
首先来介
绍非正式的方法。
要引用PHP数组中的各个元素,可以用一对中括号来指示。
因为数组没有大小限制,所以只需建立引用就可以创建数组,例如:
$states[0]="Delaware";
然后,可以如下显示数组$states的第一个元素:
echo$states[0];
接下来,可以为数组索引映射新值,从而添加其他的值,如下:
$states[1]="Pennsylvania";
$states[2]="NewJersey";
...
$states[49]="Hawaii";
有趣的是,如果认为索引值是数值索引而且是递增的,还可以在创建时省略索引值:
$states[]="Pennsylvania";
$states[]="NewJersey";
...
$states[]="Hawaii";
用这种方式创建关联数组也同样很简单,只不过必须一直使用键。
下面的示例创建了一个数组,它将美国州名映射到其加入联邦的日期:
$states["Delaware"]="December7,1787";
$states["Pennsylvania"]="December12,1787";
$states["NewJersey"]="December18,1787";
...
$states["Hawaii"]="August21,1959";
用array()创建数组
array()函数接受0个或多个元素作为输入,返回一个包含这些输入元素的数组。
其形式如下:
arrayarray([item1[,item2…[,itemN]]])
下面是一个使用array()创建索引数组的例子:
$languages=array("English","Gaelic","Spanish");
$languages[0]="English";
$languages[1]="Gaelic";
$languages[2]="Spanish";
还可以使用array()创建一个关联数组,如下:
$languages=array("Spain"=>"Spanish","Ireland"=>"Gaelic","UnitedStates"=>"English");
$languages["Spain"]="Spanish";
$languages["Ireland"]="Gaelic";
$languages["UnitedStates"]="English";
用list()提取数组
list()函数与array()类似,只是它可以在一次操作中从一个数组内提取多个值,同时为多个变量赋值。
其形式如下:
voidlist(mixed…)
从数据库或文件中提取信息时,这种构造尤其有用。
例如,假设你希望格式化并输出从一个文本文件中读取的信息。
文件的每一行都包含用户信息,如姓名、职业和喜爱的颜色,每一项用竖线分隔。
典型的一行如下所示
NinoSanzi|Professioanalgolfer|green
可以通过一个简单的循环使用list()来读取每一行,将各部分数据赋给变量,按照需要格式化并输出数据。
下面显示了如何使用list()同时为多个变量赋值:
php
//Opentheuser.txtfile
$users=fopen("users.txt","r");
//whiletheEOFhasn'tbeenreached,getnextline
while($line=fgets($users,4096)){
//useexplode()toseparateeachepieceofthedat.
list($name,$occupation,$color)=explode("|",$line);
//formatandoutputthedata
printf("Name:
%s
",$name);
printf("Occupation:
%s
",$occupation);
printf("Favoritecolor:
%s
",$color);
}
?
>
回顾一下这个例子,list()依靠函数explode()将每一行分解为三个元素,这里,explode()使用
竖线作为元素分隔符。
然后,这些元素分别赋给了$name,$occupation和$color。
至此,余下的只是如何格式化以及显示到浏览器。
用预定义的值范围填充数组
range()函数是一个快速创建数组的简单方法,并会使用low到high范围的整数值填充数组。
这个函数将返回一个包含此范围内所有整数的数组。
其形式如下:
arrayrange(intlow,inthight[,intstep])
作为一个例子,假设需要一个数组,其中包含般子中所有可能出现的值
$die=range(0,6);
//Sameas$die=array(0,1,2,3,4,5,6)
可是如果想得到一个全部由偶数或奇数组成的范围该怎么办?
或者一个由只能被5整除的数组成的范围呢?
可选的step参数为此提供了一种简便方法。
例如,如果希望有一个包含0到20之间所有偶数的数组,就可以使用步长值为2:
$even=range(0,20,2);
//even=array(0,2,4,6,8,10,12,14,16,18,20);
range()函数还可以用于字符序列。
例如,假设希望创建一个包含字母A到F的数组:
$letters=range("A","F");
$letters=array("A","B","C","D","E","F");
到目前为止,前面的例子中有关数组的内容都只是作为注释。
尽管这对于教学很合适,但在实际中确实需要了解如何将数组的内容轻松地输出到屏幕上来完测试.数组的输出通常使用print_r()函数完成,其原型如下:
Booleanprint_r(mixedvariable[,Booleanreturn])
print_r()函数接受一个变量,并将其内容发送给标准输出,成功时返回TRUE,否则返回FALSE这本身并不新奇,但它能将数组(及对象)的内容组织为一种可读性很强的格式,考虑到这一点你就会对它利目相看了·例如·假设希望查看一个关联数组的内容,这个数组包含州及其相应的州府。
可以如下调用print_r()
print_r($states);
这将返回如下结果:
Array([Ohio]=>Columbus[Iowa]=>DesMoines[Arizona]=>Phoenix)
可选参数return用来修改函数的行为,使函数将输出返回给调用者,而不是发送到标准输出。
因此,如果希望返回以上$states数组的内容,只需将return设置为TRUE:
$stateCapitals=print_r($states,TRUE);
要记住,print_r()函数并不是输出数组的唯一方法,而只是对此提供了一种便利方式。
也可以使用循环条件(while或for)来输出数组;事实上,很多应用程序特性的实现都需要使用这种循环。
测试数组
在应用程序中使用数组时,有时需要知道某个特定变量是否为一个数组。
内置函数is_array()可以用来完成这个工作。
其形式为:
Booleanis_array(mixedvariable)
is_array()函数确定variable是否为数组,如果是则返回TRUE,否则返回FALSE。
注意,即使数组只包含一个值,也将被认为是一个数组。
示例如下:
$states=array("Florida");
$states="Ohio";
printf("\$statesisanarray:
%s
",(is_array($states)?
"TRUE":
"FALSE"));
printf("\$statesisanarray:
%s
",(is_array($states)?
"TRUE":
"FALSE"));
添加和删除数组元素
PHP为扩大和缩小数组提供了一些函数。
对于那些希望模仿各种队列实现的程序员来说,这些函数可以提供便利。
顾名思义,从这些函数的函数名(push,pop,shift和unshift)
就清楚地反映出其作用。
在数组头添加元素
array-unshift()函数在数组头添加元素。
所有已有的数值键都会相应地修改,以反映其在数组中的新位置,但是关联键不受影响。
其形式如下:
intarray_unshift(arrayarray,mixedvariable[,mixedvariable…])
下面这个例子在$states数组前端添加了两个州:
$states=array("Ohio","NewYork");
array_unshift($states,"California","Texas");
但是,有时候需要一种更复杂的方式来添加数组元素(以及删除数组元素,这种功能无法用上述添加元素的方式来实现)。
在数组尾添加元素
arraypush()函数将variable添加到target_array的末尾,成功时返回TRUE,否则返回FALSE。
可以为此函数传递多个变量作为输入参数,同时向数组压入多个变量(元素)。
其形式为:
intarray_push(arrayarray,mixedvariable[,mixedvariable…])
下面这个例子在$states数组中又添加了两个州:
$states=array("Ohio","NewYork");
array_push($states,"California","Texas");
从数组头删除值
array_shift()函数删除并返回数组中找到的元素。
其结果是,如果使用的是数值健,则所有相应的值都会下移,而使用关联键的数组不受影响。
其形式为:
mixedarray_shift(arrayarray)
下面的例子删除了$states数组中的第一个州:
$states=array("Ohio","NewYork","California","Texas");
$states=array_shift($states);
从数组尾删除元素
array_pop()函数删除并返回数组的最后一个元素。
其形式为:
mixedarray_pop(arraytarget_array)
下面的例子从$states数组删除了最后的一个州:
$states=array("Ohio","NewYork","California","Texas");
$states=array_pop($states);
定位数组元素
对于当今这个信息驱动的社会来说,能够有效地筛选数据绝对是至关重要的。
搜索数组
in_array()函数在数组中搜索一个特定值,如果找到这个值则返回TRUE,否则返回FALSE。
其形式如下:
booleanin_array(mixedneedle,arrayhaystack[,booleanstrict])
来看下面的例子,以下数组包含公布了全州禁烟令的各个州,如果在这个数组中找到一个特定的州(Ohio),则输出一个消息:
$states="Ohio";
$states=array("California","Hawaii","Ohio","NewYork");
if(in_array($states,$states))echo"Nottoworry,$statesissmoke-free!
";
第3个参数strict可选,它强制in_array()在搜索时考虑类型。
1.搜索关联数组键
如果在一个数组中找到一个指定的键,函数array_keyexists()返回TRUE,否则返回FALSE。
其形式如下:
booleanarray_key_exists(mixedkey,arrayarray)
下面的例子将在数组键中搜索Ohio,如果找到,将输出这个州加入美国联邦政府的有关信息:
$state["Delaware"]="December7,1787";
$state["Pennsylvania"]="December12,1787";
$state["Ohio"]="March1,1803";
if(array_key_exists("Ohio",$state))
printf("OhiojoinedtheUnionon%s",$state["Ohio"]);
2.搜索关联数组值
array_search()函数在一个数组中搜索一个指定的值,如果找到则返回相应的键,否则返回FALSE。
其形式如下:
mixedarray_search(mixedneedle,arrayhaystack[,Booleanstrict]);
下面的例子在$state中搜索一个特定的日期(December7),如果找到,则返回相应州的有关信息:
$state["Ohio"]="March1";
$state["Delaware"]="December7";
$state["Pennsylvania"]="December12";
$founded=array_search("December7",$state);
if($founded)printf("%swasfoundedon%s.",$founded,$state[$founded]);
获取数组键
array_keys()函数返回一个数组,其中包含所搜索数组中找到的所有键。
其形式如下:
arrayarray_keys(arrayarray[,mixedsearch_value])
如果包含可选参数search_value,则只会返回与该值匹配的键。
下面的例子将输出$state数组中找到的所有键值:
$state["Delaware"]="December7,1787";
$state["Pennsylvania"]="December12,1787";
$state["NewJersey"]="December18,1787";
$keys=array_key($state);
print_r($keys);
获取数组值
array_values()函数返回一个数组中的所有值,并自动为返回的数组提供数值索引。
其形式如下:
arrayarray_values(arrayarray)
下面的例子将获取$population中找到的各州人口数:
$population=array("Ohio"=>"11,421,267","Iowa"=>"2,936,760");
print_r(array_values($population));
遍历数组
通常需要遍历数组并获得各个键或值(或者同时获得键和值),所以毫不奇怪,PHP为此提供了一些函数来满足需求。
许多函数能完成两项任务,不仅能获取当前指针位置的键或值,还能将指针移向下一个适当的位置。
获取当前数组键
key()函数返回input_array中当前指针所在位置的键。
其形式如下:
mixedkey(arrayarray)
下面的例子通过迭代处理数组并移动指针来输出$capitals数组的键:
$capitals=array("Ohio"=>"Columbus","Iowa"=>"DesMoines");
echo"
Canyounamethecapitalsofthesestates?
";while($key=key($capitals)){
printf("%s
",$key);
next($capitals);
}
注意,每次调用key()时不会移动指针。
为此需要使用next()函数,这个函数的唯一作用就是完成推进指针的任务。
获取当前数组值
current()函数返回数组中当前指针所在位置的数组值。
其形式如下:
mixedcurrent(arrayarray)
下面修改前面的例子,这一次我们要获取数组值:
$capitals=array("Ohio"=>"Columbus","Iowa"=>"DesMoines");
echo"
Canyounamethestatesofthesecapitals?
";while($capitals=current($capitals)){
printf("%s
",$capitals);
next($capitals);
}
获取当前数组键和值
each()函数返回input_array的当前键/值对,并将指针推进一个位置。
其形式如下:
arrayeach(arrayarray)
返回的数组包含四个键,键0和key包含键名,而键1和value包含相应的数据。
如果执行each()前指针位于数组末尾,则返回FALSE。
移动数组指针
有很多函数可以移动数组指针。
1.将指针移动到下一个数组位置
next()函数返回紧接着放在当前数组指针下一个位置的数组值。
其形式如下:
mixednext(arrayarray)
以下是一个例子:
$fruits=array("apple","orange","banana");
$fruit=next($fruits);//returnorange
$fruit=next($fruits);//returnbanana
还可以将指针前移,也可以直接移动到数组的开始和末尾位置。
下面就来介绍这些函数。
2.将指针移动到前一个数组位置
prev()函数返回位于当前指针前一个位置的数组值,如果指针本来就位于数组的第一个位置,则返回FALSE。
其形式如下:
mixedprev(arrayarray)
因为prev()的用法与next()相同,所以这里不再举例。
3.将指针移到第一个数组位置
reset()函数用于将数组指针设置回数组的开始位置。
其形式如下:
mixedreset(arrayarray)
如果需要在脚本中多次查看或处理一个数组,就经常使用这个函数,另外这个函数还经常在排序结束时使用。
4.将指针移动到最后一个数组位置
end()函数将指针移动到数组的最后一个位置,并返回最后一个元素。
其形式如下:
mixedend(arrayarray)
下面的例子展示了如何获取第一个和最后一个数组值:
$fruits=array("apple","orange","banana");
$fruit=current($fruits);//returnorange
$fruit=end($fruits);//returnbanana
向函数传递数组值
arraywalk()函数将数组中的各个元素传递到用户自定义函数。
如果需要对各个数组元素完成某个特定动作,这个函数就很有用。
如果希望真正修改数组键/值对,则需要将每个键/值对作为引用传递给函数。
其形式如下:
Booleanarraywalk(array&azray,callbackfunction[,mixeduserdata])
用户自定义函数必须接受两个输入参数:
第一个表示数组的当前值,第二个表示当前键。
如果调用arraywalk()时给定了可选参数userdata,它的值将作为第3个参数传递给这个用户自定义函数。
你可能在挠头了,考虑这个函数该怎么使用。
可能最有说明力的一个例子就是对用户提供的表单数组进行有效性检查。
假设要求用户提供他认为最能描述所在州的6个关键词。
示例表单如代码清单
Provideuptosixkeywordst
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 参考手册