收藏 分享(赏)

很全的php数组操作方法.doc

上传人:11xg27ws 文档编号:6356505 上传时间:2019-04-09 格式:DOC 页数:13 大小:96KB
下载 相关 举报
很全的php数组操作方法.doc_第1页
第1页 / 共13页
很全的php数组操作方法.doc_第2页
第2页 / 共13页
很全的php数组操作方法.doc_第3页
第3页 / 共13页
很全的php数组操作方法.doc_第4页
第4页 / 共13页
很全的php数组操作方法.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、很全的 php 数组操作方法一、数组操作的基本函数数组的键名和值array_values($arr);获得数组的值array_keys($arr);获得数组的键名array_flip($arr);数组中的值与键名互换(如果有重复前面的会被后面的覆盖)in_array(“apple“,$arr);在数组中检索 applearray_search(“apple“,$arr);在数组中检索 apple ,如果存在返回键名array_key_exists(“apple“,$arr);检索给定的键名是否存在数组中isset($arrapple):检索给定的键名是否存在数组中数组的内部指针current(

2、$arr);返回数组中的当前单元pos($arr);返回数组中的当前单元key($arr);返回数组中当前单元的键名prev($arr);将数组中的内部指针倒回一位next($arr);将数组中的内部指针向前移动一位end($arr);将数组中的内部指针指向最后一个单元reset($arr;将数组中的内部指针指向第一个单元each($arr);将返回数组当前元素的一个键名/值的构造数组,并使数组指针向前移动一位list($key,$value)=each($arr);获得数组当前元素的键名和值数组和变量之间的转换extract($arr);用于把数组中的元素转换成变量导入到当前文件中,键名当作

3、变量名,值作为变量值注:(第二个参数很重要,可以看手册使用)使用方法 echo $a;compact(var1,var2,var3);用给定的变量名创建一个数组二、数组的分段和填充数组的分段array_slice($arr,0,3);可以将数组中的一段取出,此函数忽略键名array_splice($arr,0,3,array(“black“,“maroon“);可以将数组中的一段取出,与上个函数不同在于返回的序列从原数组中删除分割多个数组array_chunk($arr,3,TRUE);可以将一个数组分割成多个,TRUE 为保留原数组的键名数组的填充array_pad($arr,5,x);将一

4、个数组填补到制定长度三、数组与栈array_push($arr,“apple“,“pear“);将一个或多个元素压入数组栈的末尾(入栈) ,返回入栈元素的个数array_pop($arr);将数组栈的最后一个元素弹出(出栈)四、数组与列队array_shift($arr);数组中的第一个元素移出并作为结果返回(数组长度减 1,其他元素向前移动一位,数字键名改为从零技术,文字键名不变)array_unshift($arr,“a“,array(1,2);在数组的开头插入一个或多个元素五、回调函数array_walk($arr,function,words);使用用户函数对数组中的每个成员进行处理(

5、第三个参数传递给回调函数 function)array_mpa(“function“,$arr1,$arr2);可以处理多个数组(当使用两个或更多数组时,他们的长度应该相同)array_filter($arr,“function“);使用回调函数过滤数组中的每个元素,如果回调函数为TRUE,数组的当前元素会被包含在返回的结果数组中,数组的键名保留不变array_reduce($arr,“function“,“*“);转化为单值函数(* 为数组的第一个值)六、数组的排序通过元素值对数组排序sort($arr);由小到大的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序rsort($arr

6、);由大到小的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序usort($arr,“function“);使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0 表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)忽略键名的数组排序asort($arr);由小到大的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序arsort($arr);由大到小的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序uasort($arr,“function“);使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0 表示相等,正数

7、表示第一个大于第二个,负数表示第一个小于第二个)保留键名的数组排序通过键名对数组排序ksort($arr);按照键名正序排序krsort($arr);按照键名逆序排序uksort($arr,“function“);使用用户自定义的比较函数对数组中的键名进行排序(function 中有两个参数,0 表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)自然排序法排序natsort($arr);自然排序(忽略键名)natcasesort($arr);自然排序(忽略大小写,忽略键名)七、数组的计算数组元素的求和array_sum($arr);对数组内部的所有元素做求和运算数组的合并array

8、_merge($arr1,$arr2);合并两个或多个数组(相同的字符串键名,后面的覆盖前面的,相同的数字键名,后面的不会做覆盖操作,而是附加到后面)“+”$arr1+$arr2;对于相同的键名只保留后一个array_merge_recursive($arr1,$arr2); 递归合并操作,如果数组中有相同的字符串键名,这些值将被合并到一个数组中去。如果一个值本身是一个数组,将按照相应的键名把它合并为另一个数组。当数组 具有相同的数组键名时,后一个值将不会覆盖原来的值,而是附加到后面数组的差集array_diff($arr1,$arr2);返回差集结果数组array_diff_assoc($a

9、rr1,$arr2,$arr3);返回差集结果数组,键名也做比较数组的交集array_intersect($arr1,$arr2);返回交集结果数组array_intersect_assoc($arr1,$arr2);返回交集结果数组,键名也做比较八、其他的数组函数range(0,12);创建一个包含指定范围单元的数组array_unique($arr);移除数组中重复的值,新的数组中会保留原始的键名array_reverse($arr,TRUE);返回一个单元顺序与原数组相反的数组,如果第二个参数为TRUE 保留原来的键名/srand(float)microtime()*10000000);

10、 随机种子触发器array_rand($arr,2);从数组中随机取出一个或 多个元素shuffle($arr);将数组的顺序打乱本类函数允许用多种方法来操作数组和与之交互。数组的本质是储存,管理和操作一组变量。PHP 支持一维和多维数组,可以是用户创建或由另一个函数创建。有一些特定的数据库处理函数可以从数据库查询中生成数组,还有一些函数返回数组。array_change_key_case 返回字符串键名全为小写或大写的数组array_chunk 将一个数组分割成多个array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值array_count_values

11、统计数组中所有的值出现的次数array_diff_assoc 带索引检查计算数组的差集array_diff_key 使用键名比较计算数组的差集array_diff_uassoc 用用户提供的回调函数做索引检查来计算数组的差集array_diff_ukey 用回调函数对键名比较计算数组的差集array_diff 计算数组的差集array_fill_keys Fill an array with values, specifying keysarray_fill 用给定的值填充数组array_filter 用回调函数过滤数组中的单元array_flip 交换数组中的键和值array_interse

12、ct_assoc 带索引检查计算数组的交集array_intersect_key 使用键名比较计算数组的交集array_intersect_uassoc 带索引检查计算数组的交集,用回调函数比较索引array_intersect_ukey 用回调函数比较键名来计算数组的交集array_intersect 计算数组的交集array_key_exists 检查给定的键名或索引是否存在于数组中array_keys 返回数组中所有的键名array_map 将回调函数作用到给定数组的单元上array_merge_recursive 递归地合并一个或多个数组array_merge 合并一个或多个数组arr

13、ay_multisort 对多个数组或多维数组进行排序array_pad 用值将数组填补到指定长度array_pop 将数组最后一个单元弹出(出栈)array_product 计算数组中所有值的乘积array_push 将一个或多个单元压入数组的末尾(入栈)array_rand 从数组中随机取出一个或多个单元array_reduce 用回调函数迭代地将数组简化为单一的值array_reverse 返回一个单元顺序相反的数组array_search 在数组中搜索给定的值,如果成功则返回相应的键名array_shift 将数组开头的单元移出数组array_slice 从数组中取出一段array_s

14、plice 把数组中的一部分去掉并用其它值取代array_sum 计算数组中所有值的和array_udiff_assoc 带索引检查计算数组的差集,用回调函数比较数据array_udiff_uassoc 带索引检查计算数组的差集,用回调函数比较数据和索引array_udiff 用回调函数比较数据来计算数组的差集array_uintersect_assoc 带索引检查计算数组的交集,用回调函数比较数据array_uintersect_uassoc 带索引检查计算数组的交集,用回调函数比较数据和索引array_uintersect 计算数组的交集,用回调函数比较数据array_unique 移除数

15、组中重复的值array_unshift 在数组开头插入一个或多个单元array_values 返回数组中所有的值array_walk_recursive 对数组中的每个成员递归地应用用户函数array_walk 对数组中的每个成员应用用户函数array 新建一个数组arsort 对数组进行逆向排序并保持索引关系asort 对数组进行排序并保持索引关系compact 建立一个数组,包括变量名和它们的值count 计算数组中的单元数目或对象中的属性个数current 返回数组中的当前单元each 返回数组中当前的键值对并将数组指针向前移动一步end 将数组的内部指针指向最后一个单元extract

16、从数组中将变量导入到当前的符号表in_array 检查数组中是否存在某个值key 从关联数组中取得键名krsort 对数组按照键名逆向排序ksort 对数组按照键名排序list 把数组中的值赋给一些变量natcasesort 用“自然排序”算法对数组进行不区分大小写字母的排序natsort 用“自然排序”算法对数组排序next 将数组中的内部指针向前移动一位pos current() 的别名prev 将数组的内部指针倒回一位range 建立一个包含指定范围单元的数组reset 将数组的内部指针指向第一个单元rsort 对数组逆向排序shuffle 将数组打乱sizeof count() 的别名

17、sort 对数组排序uasort 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联uksort 使用用户自定义的比较函数对数组中的键名进行排序usort 使用用户自定义的比较函数对数组中的值进行排序使用数组在前面的章节中,我们所介绍的变量都是标量变量,这些变量只能存储单个数据。数组是一个可以存储一组或一系列数值的变量。一个数组可以具有许多个元素。每个元素有一个值,例如文本、数字或另一个数组。一个包含其他数组的数组称为多维数组。3.1 什么是数组一个标量变量就是一个用来存储数值的命名区域。同样,一个数组就是一个用来存储一系列变量值的命名区域,因此,可以使用数组组织标量变量。存储在数组中

18、的值称为数组元素。每个数组元素有一个相关的索引(也称为关键字),它可以用来访问元素。在大多数编程语言中,数组都具有数字索引,而且这些索个通常是从0 或 1 开始的。3.2 数字索引数组在 PHP 中,数字索引的默认值是从 0 开始的,当然也可以改变它。3.2.1 数字索引数组的初始化$porducts = array( Tires, Oil, Spark Plugs );就像 echo 语句一样,array()实际上是一个语言结构,而不是一个函数。根据对数组内容的需求不同,可能不需要再像以上例子一样对它们进行手工的初始化操作。如果所需数据保存在另一个数组中,可以使用运算符“=”简单地将数组复制

19、到另一个数组。如果需要将按升序排列的数字保存在一个数组中,可以使用 range()函数自动创建这个数组。如下这行代码将创建一个从 1 到 10 的数字数组:$numbers = range(1,10);range()函数具有一个可选的第三个参数,这个参数允许设定值之间的步骤。例如,如需建立一个 1 到 10 之间的奇数数组,可以使用如下代码:$odds = range(1,10,2);range()函数也可以对字符进行操作,如:$letters = range(a, z);3.2.2 访问数组的内容要访问一个变量的内容,可以直接使用其名称。如果该变量是一个数组,可以使用变量名称和关键字或索引的

20、组合来访问其内容。关键字或索引将指定我们要访问的变量。索引在变量名称后面用方括号括起来。在默认的情况下,0 元素是数组的第一个元素。请注意,虽然 PHP 的字符串解析功能非常强大和智能,但是可能会引起混淆。当你将数组或其他变量嵌入双引号中的字符串时,如果不能正确解释它们,可以将它们放置在双引号之外,或者查找第 4 章的“字符串操作与正则表达式”获得更复杂的语法。就像 PHP 的其他变量一样,数组不需要预先初始化或创建。在第一次使用它们的时候,它们会自动创建。3.2.3. 使用循环访问数组由于数组使用有序的数字作为索引,所以使用一个 for 循环就可以很容易地显示数组的内容。for ($i=0;

21、 $i100, Oil=10, Spark Plugs=4 );关键字和值之间的符号只是一个大于号与等于符号。3.3.2 访问数组元素同样,可以使用变量名称和关键字来访问数组的内容。例如$pricesTires。3.3.3 使用循环语句因为相关数组的索引不是数字,因此无法在 for 循环语句中使用一个简单的计数器对数组进行操作。但是可以使用 foreach 循环或 list()和 each()结构。当使用 foreach 循环语句对相关数组进行操作时, foreach()循环具有不同的结构。可以按如下方式使用关键字:foreach ($prices as $key = $value)echo

22、$key.=.$value.;如下所示的代码将使用 each()结构打印$prices 数组的内容:while( $element = each($prices)echo $elementkey;echo - ;echo $elementvalue;echo ;each()函数将返回数组的当前元素,并将下一个元素作为当前元素。因为在 while 循环中调用 each()函数,它将按顺序返回数组中每个元素,并且当它到达数组末尾时,循环操作将终止。在 这段代码中,变量$element 是一个数组。当调用 each()时,它将返回一个带有 4 个数值和 4 个指向数组位置的索引的数组。位置 key

23、和 0 包含了当 前元素的关键字,而位置 value 和 1 包含了当前元素的值。虽然这与选哪一种方法没什么不同,但我们选择了使用命名位置,而不是数字索引位置。此外,还有一种更为高级和常见的方式来完成相同的操作。函数 list()可以用来将一个数组分解为一系列的值。可以按照如下方式将函数 each()返回的两个值分开:list( $product, $price) = each( $price);以上代码使用 each()从$prices 数组中取出当前元素,并且将它作为数组返回,然后再指向下一个元素。它还使用 list()将从 each()返回的数组中所包含 0、1 两个元素变为两个名为$p

24、roduct 和$price 的新蛮量。我们可以循环遍历整个$prices 数组,使用如下所示的简短脚本显示它的内容:while(list($prodct, $pirce) = each($prices)echo “$product - $price“;这段代码的输出结果与前面脚本的输出结果相同,但它更容易阅读,因为 list()允许为新变量命名。需要注意的一点是,当使用 each()函数时,数组将记录当前元素。如果希望在相同的脚本中两次使用该数组,就必须使用函数 reset()将当前元素重新设置到数组开始处。要再次遍历 prices 数组,可以使用如下所示的代码:reset($prices)

25、;while(list($product, $price) = each($prices)echo “$product - $price“;3.4 数组操作符+联合, =等价,=恒等,!= 不等价,TIR, Descrption=Tires, Price=100 ), array ( Code=OIL, Descrption=Oil, Price=10 ), array ( Code=SPK, Dption=Spark Plugs, Price=4 ) ;如果希望检索单个值,那么使用这个数组会容易得多。请记住,将所描述的内容保存到用它的名 称命名的列中,与将其保存到所谓的第一列中相比,前者更容

26、易记忆。使用描述性索引,不需要记住某个元素是存放在xy位置的。使用一对有意义的行和 列的名称作为索引可以使用你很容易找到所需的数据。然后,我们却不能使用一个简单的 for 循环按顺序遍历每一列。可以使用 for 循环遍历外部的数 字索引数组$products。$products 数组的每一行都是一个具有描述性索引的数组。在 while 循环中使用 each()和 list()函数, 可以遍历整个内部数组。因此,需要一个内嵌有 while 循环的 for 循环。for ( $row = 0; $row ;三维数组具有高、宽、深的概念。如果能轻松地将一个二维数组想像成一个有行和列的表格,那么就可以

27、将三维数组想像成一堆像这样的表格。每个元素可以通过层、行和列进行引用。根据创建多维数组的方法,可以创建四维、五维或六维数组。在 PHP 中,并没有设置数组维数的限制,但人们很难设想一个多于三维的数组。大多数的实际问题在逻辑上只需要使用三维或者更少维的数组结构就可以了。3.7 多维数组的排序对 多于一维的数组进行排序,或者不按字母和数字的顺序进行排,要复杂得多。PHP 知道如何比较两个数字或字符串,但在多维数组中,每个元素都是一个数组。 PHP 不知道如何比较两个数组,所以需要建立一个比较它们的方法。在大多数情况下,单词和数字的顺序是显而易见的但对于复杂的对象,问题就会多一些。3.7.1 用户定

28、义排序usort()中的“u”代表“user” ,因为这个函数要求传入用户定义的比较函数。asort 和ksort 对应的版本 uasort()和 uksort()也要求传入用户定义的比较函数。类似于 asort(),当对非数字索引数组的值进行排序时, uasort()才会被使用。如果值是简单的数字或文本则可以使用 asort。如果要比较的值像数组一样复杂,可以定义一个比较函数,然后使用 uasort()。类似于 ksort(),当对非数字索引数组的关键字进行排序时才使用 uksort()。如果值是简单的数字或文本就使用 ksort。如果要比较的对象像数组一样复杂,可以定义一个比较函数,然后使

29、用 uksort()。3.7.2 反向用户排序函数 sort()、asort()和 ksort()都分别对应一个带字母“r”的反向排序函数。用户定义的排序没有反向变体,但可以对一个多维数组进行反向排序。3.8 对数组进行重新排序3.8.1 使用 shuffle()函数在 PHP 的早期版本中,shuffle()要求调用 srand()函数时首先提供一个随机数生成器。如今,这个步骤已经不再需要了。如果这个函数对你非常重要,可以在程序中应用该函数之前在服务器上测试它。由于并不需要真正重新排序整个数组,使用 array_rand()函数可以实现相同的功能。3.8.2 使用 array_reverse

30、()函数array_reverse()函数使用一个数组作参数,返回一个内容与参数数组相同但顺序相反的数组。因为单独使用 range()函数将创建一个升序序列,所以必须使用 sort()函数或array_reverse()函数将数组中的数字变为降序。或者,也可以使用 for 循环通过一次一个元素的方式创建这个数组。如:$numbers = array();for ($i=10; $i0; $i-)array_push( $numbers, $i );一个 for 循环可以像这样按降序方式运行。可以将计数器一个 for 循环可以像这样按降序方式运行。可以将计数器的初始值设为一个大数,在每次循环末尾

31、使用运算符“-”将计数器减 1。在这里,我们创建了一个空数组,然后使用 array_push()函数将每个新元素添加到数组的末尾。请注意,和 array_push()相反的函数是 array_pop(),这个函数用来删除并返回数组末尾的一个元素。或者,也可以使用 array_reverse()函数将由 range()函数所创建的数组进行反向排序。请注意,array_reverse()函数将返回一个原数组修改后的副本。如果不再需要原来的数组,比如在这个例子中,可以用新的副本覆盖原来的版本。如果数据只是一系列的整数,可以通过将-1 作为 range()函数的第三个可选调参数,以相反的顺序创建该数组

32、。3.9 从文件载入数组使用 file()函数将整个文件载入一个数组中。文件中的每行则成为数组中的一个元素。使用了 count()函数来统计数组中的元素个数。explode(“t“, $orders$i)explode()函数可以将传入的字符串分割成一个个小块。每个制表符成为两个元素之间的断点。这个函数的可选参数 limit 可以用来限制被返回的最大块数。可以使用许多方法从字符串中提取数字。在这里,我们使用了 intval()函数。它可以将一个字符串转化成一个整数。这个转换是相当智能化的,它可以忽略某些部分,例如标签就不能转换成数字。3.10 执行其他的数组操作3.10.1 在数组中浏览:ea

33、ch()、current()、reset() 、end()、next()、pos() 和 prev()前面已经提到,每个数组都有一个内部指针指向数组中的当前元素。当使用函数 each()时,就间接地使用了这个指针,但是也可以直接使用和操作这个指针。如果创建一个新数组,那么当前指针就将被初始化,并指向数组的第一个元素。调用 next()或 each()将使指针前移一个元素。调用 each($array_name)会在指针前移一个位置之前返回当前元素。next()函数则有些不同调用 next($array_name)是将指针前移,然后再返回新的当前元素。调用 end($array_name)可以将

34、指针移到数组末尾。要反向遍历一个数组,可以使用 end()和 prev()函数。 prev()函数和 next()函数相反。它是将当前指针往回移一个位置然后再返回新的当前元素。3.10.2 对数组的每一个元素应用任何函数:array_walk()array_walk()函数需要三个参数。第一个是 arr,也就是需要处理的数组。第二个是func,也就是用户自定义并将作用于数组中每个元素的函数。第三个参数 userdata 是可选的,如果使用它,它可以作为一个参数传递给我们自己的函数。看一个销微复杂点的例子:function my_multiply(array_walk(在这里,我们定义了一个名为

35、 my_multiply()的函数,它可以用所提供的乘法因子去乘以数组中的每个元素。此外,还有一个需要注意的问题是传递毵数$value 的方式。在 my_multiply()的函数定义中,变量前面的地址符(&)意味着$value 是按引用方式传递的。按引用方式传递允许函数修改数组的内容。3.10.3 统计数组元素个数:count()、sizeof()和 array_count_values()count()函数和 sizeof()函数具有同样的用途,都可以返回数组元素的个数。可以得到一个常规标量变量中的元素个数,如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组个数

36、就是 0。如 果调用 array_count_values($array),这个函数将会统计每个特定的值在数组$array 中出现过的次数(这就是数组的基数集) 。 这个函数将返回一个包含频率表的相关数组。这个数组包含数组$array 中的所有值,并以这些值作为相关数组的关键字。每个关键字所对应的数值就是关键字 在数组$array 中出现的次数。3.10.4 将数组转换成标量变量:extract()对于一个非数字索引数组,而该数组又有许多关键字-值对,可以使用函数 extract()将它们转换成一系列的标量变量。函数 extract()的作用是通过一个数组创建一系列的标量变量,这些变量的名称必须是数组中关键字的名称,而变量值则是数组中的值。extract()函数具有两个可选参数:extract_type 和 prefix。变量 extract_type 将告诉extract()函数如何处理冲突。有时可能已经存在一个和数组关键字同名的变量,该函数的默认操作是覆盖已有的变量。两个最常用的选项是 EXTR_OVERWRITE(默认值)和 EXTR_PREFIX_ALL。当知道会发生特定的冲突并且希望跳过该关键字或要给它加上前缀时,可能会用到其他选项。extract()可以提取出一个元素,该元素的关键字必须是一个有效的变量名称,这就意味着以数字开始或包含空格的关键字将被跳过。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > PHP资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报