PHP中的数组(二)常用数组处理函数
数组的相关处理函数
一.数组键/值操作有关的函数
1.array_values() 无论是关联的还是索引的返回的都是索引数组
<?php $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php"); $arr=array_values($lamp); list($os,$wb,$db,$lang)=$arr; echo $os."<br>"; echo $wb."<br>"; echo $db."<br>"; echo $lang."<br>"; echo "<pre>"; print_r($arr); echo "<pre>"; ?>
2.array_keys(array,value) 返回键名
array 必需。规定输入的数组。
value 可选。指定值的索引(键)。
<?php $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php"); $arr=array_keys($lamp,); echo "<pre>"; print_r($arr); echo "<pre>"; ?>
3.in_array(value,array,type) 函数在数组中搜索给定的值
value 必需。规定要在数组搜索的值。
array 必需。规定要搜索的数组。
type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
<?php $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",array("a","b")); if(in_array(array("a","b"),$lamp)){ echo "存在!"; }else{ echo "不存在!"; } ?>
4.array_key_exists(key,array) 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。
key 必需。规定键名。
array 必需。规定输入的数组。
<?php $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",array("a","b")); if(array_key_exists("os",$lamp)){ echo "存在!"; }else{ echo "不存在!"; } ?>
5.array_flip(array) 交换数组中的键和值. 函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失。
<?php $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",10=>"Linux"); $arr=array_flip($lamp); echo "<pre>"; print_r($arr); echo "<pre>"; ?>
6.array_reverse(array,preserve) 将原数组中的元素顺序翻转,创建新的数组并返回。
preserve 可选。规定是否保留原始数组的键名。可能的值:true(是) 和 false。
<?php $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php"); $arr=array_reverse($lamp); echo "<pre>"; print_r($arr); echo "<pre>"; ?>
二.统计数组元素的个数和唯一性
1.count(array,mode) sizeof(array,mode); 统计数组的长度
mode 可选。规定函数的模式。可能的值:
0 - 默认。不检测多维数组(数组中的数组)。
1 - 检测多维数组。
<?php $arr=array("id"=>1,"name"=>"zhangsan","age"=>20,"sex"=>"nan",array(1,2,3,4,5,6)); echo "conut()--->".count($arr,1); echo "<br>"; echo "sizeof()--->".sizeof($arr,1); ?>
2.array_count_values() 用于统计数组中所有值出现的次数。
本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。
<?php $arr=array("id1"=>1,"id2"=>1,"name"=>"zhangsan","age"=>20,"sex"=>"nan"); $a=array_count_values($arr); echo "<pre>"; print_r($a); echo "<pre>"; ?>
3.array_unique 删除数组中重复的值,并返回结果数组。被返回的数组将保持第一个数组元素的键类型
<?php $a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat"); print_r(array_unique($a)); ?>
三.使用回调函数处理数组的函数
1.array_filter(array,function) 用回调函数过滤数组中的元素。如果自定义过滤函数返回 true,则被操作的数组的当前值就会被包含在返回的结果数组中, 并将结果组成一个新的数组。如果原数组是一个关联数组,键名保持不变。
function 必需。自定义函数的名称。
<?php $arr=array(1,-2,3,-4,5,-6,7,8,9,10,11,12); $a=array_filter($arr,"myfun"); function myfun($n){ if($n>0){ return true; }else{ return false; } } echo "<pre>"; print_r($a); echo "<pre>"; ?>
2.array_walk(array,function,userdata...) 对数组中的每个成员应用用户函数。如果成功则返回 TRUE,否则返回 FALSE。
function 必需。用户自定义函数的名称。
serdata 可选。用户输入的值,可作为回调函数的参数。
<?php $lamp=array("os"=>"Linux","wb"=>"Apache","db"=>"MySql","la"=>"php"); array_walk($lamp,"myfun"); function myfun($value,$key){ echo $key."--->".$value."<br>"; } ?>
3.array_map(function,array1,array2,array3...) 将回调函数作用到给定数组的单元上。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
<?php $lamp=array("os"=>"Linux","wb"=>"Apache","db"=>"MySql","la"=>"php"); $arr=array_map("myfun",$lamp); function myfun($n){ return $n."=="; } echo "<pre>"; print_r($arr); echo "<pre>"; ?>
四.数组的排序函数
sort()
rsort()
usort()
asort()
arsort()
uasort()
ksort()
krsort()
uksort()
hatsort()
natcasesort()
array_multisort()
1.简单的数组排序
sort(array,sorttype) 函数按升序对给定数组的值排序。键名改变
sorttype 可选。规定如何排列数组的值。可能的值:
SORT_REGULAR - 默认。以它们原来的类型进行处理(不改变类型)。
SORT_NUMERIC - 把值作为数字来处理
SORT_STRING - 把值作为字符串来处理
SORT_LOCALE_STRING - 把值作为字符串来处理,基于本地设置*。
rsort(array,sorttype)函数对数组逆向排序,键名改变
<?php $data=array(1,3,2,8,4,7); sort($data); echo "<pre>"; print_r($data); echo "<pre>"; $data1=array("a"=>"cfr","c"=>"brtd","b"=>"adefex"); rsort($data1); echo "<pre>"; print_r($data1); echo "<pre>"; ?>
2.根据键名对数组排序
ksort(array,sorttype)函数对数组按照键名排序,为数组值保留原来的键
krsort(array,sorttype)函数对数组按照键名逆向排序,为数组值保留原来的键
<?php $arr=array("a"=>"bder","c"=>"adef","b"=>"cderf"); ksort($arr); echo "<pre>"; print_r($arr); echo "<pre>"; krsort($arr); echo "<pre>"; print_r($arr); echo "<pre>"; ?>
3.根据元素的值对数组进行排序
asort(array,sorttype)函数对数组进行排序并保持索引关系,键名不变
arsort(array,sorttype)函数对数组进行逆向排序并保持索引关系,键名不变
<?php $my_array = array("a"=>"Dog","b"=>"Cat","c" =>"Horse"); asort($my_array); echo "<pre>"; print_r($my_array); echo "<pre>"; arsort($my_array); echo "<pre>"; print_r($my_array); echo "<pre>"; ?>
4.根据“自然数排序”法读数组排序
natsort(array)函数用“自然排序”算法对数组进行不区分大小写字母的排序。
natcasesort(array)函数用“自然排序”算法对数组排序。
<?php $my_array = array("file1.txt","file11.txt","file2.txt","File22.txt"); echo "用sort排序:"; sort($my_array); echo "<pre>"; print_r($my_array); echo "<pre>"; echo "用natsort排序:"; natsort($my_array); echo "<pre>"; print_r($my_array); echo "<pre>"; echo "用natcasesort排序:"; natcasesort($my_array); echo "<pre>"; print_r($my_array); echo "<pre>"; ?>
5.用户自定义规则对数组排序
usort(array,function)函数使用用户自定义的比较函数对数组中的值进行排序,会删除原来的键名
function必需。用户自定义的函数。
函数必须设计为返回 -1, 0, 或 1,并应该接受两个供比较的参数,同时以类似下面这样的方式来工作:
如果 a = b, 返回 0
如果 a > b, 返回 1
如果 a < b, 返回 -1
uasort(array,function)函数使用用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。
uksort(array,function)函数使用用户自定义的比较函数对数组中的键名进行排序,,并保持索引关联(不为元素分配新的键)
<?php $arr=array("Linux","Apache","MySql","Php"); usort($arr,"sortbylen"); //用户自定义按照字符串长度排序函数 function sortbylen($one,$two){ if(strlen($one)==strlen($two)) return 0; return (strlen($one)>strlen($two))?1:-1; } echo "<pre>"; print_r($arr); echo "<pre>"; ?>
6.多维数组的排序
array_multisort(array1,sorting order,sorting type,array2,array3...)函数对多个数组或多维数组进行排序。
array1 必需。规定输入的数组。
sorting order 可选。规定排列顺序。可能的值是 SORT_ASC(默认,按升序排列。(A-Z)) 和 SORT_DESC( 按降序排列。(Z-A) )。
sorting type 可选。规定排序类型。可能的值是SORT_REGULAR(默认。将每一项按常规顺序排列。)、SORT_NUMERIC(将每一项按数字顺序排列。)和SORT_STRING( 将每一项按字母顺序排列。)。
array2 可选。规定输入的数组。
array3 可选。规定输入的数组。
<?php $a1=array("Aog","Dog","Cat"); $a2=array("Pluto","Fido","Missy"); array_multisort($a1,$a2); print_r($a1); print_r($a2); ?>
五.数组的拆分、合并、分解、接合的函数
1.array_slice(array,offset,length,preserve)在数组中根据条件取出一段值,并返回。
offset 必需。数值。规定取出元素的开始位置。
如果是正数,则从前往后开始取,如果是负值,从后向前取 offset 绝对值。
length 可选。数值。规定被返回数组的长度。
如果是负数,则从后向前,选取该值绝对值数目的元素。如果未设置该值,则返回所有元素。
preserve 可选。可能的值:
true - 保留键
false - 默认 - 重置键
<?php $arr=array("a","b","c","d"); print_r(array_slice($arr,1,2)); echo "<br>"; print_r(array_slice($arr,-2,1)); echo "<br>"; print_r(array_slice($arr,1,2,true)); echo "<br>"; ?>
2.array_splice()
3.array_combine(array1,array2)通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值。如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false。
array1 必需。规定键名。
array2 必需。规定值
注意:两个参数必须有相同数目的元素。
<?php $a=array(1,2,3,4); $b=array("a","b","c","d"); echo "<pre>"; print_r(array_combine($a,$b)); echo "<pre>"; ?>
4.array_merge(array1,array2,array3...)把一个或多个数组合并为一个数组。
如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。
<?php $a1=array("a"=>"Horse","b"=>"Dog"); $a2=array("c"=>"Cow","b"=>"Cat"); print_r(array_merge($a1,$a2)); ?>
5.array_intersect(array1,array2,array3...)计算数组的交集。结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变。
<?php $a1=array(0=>"Cat",1=>"Dog",2=>"Horse"); $a2=array(3=>"Horse",4=>"Dog",5=>"Fish"); print_r(array_intersect($a1,$a2)); ?>
6.array_diff(array1,array2,array3...)返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。
注意:都是与第一个数组进行比较
<?php $a1=array(0=>"Cat",1=>"Dog",2=>"Horse"); $a2=array(3=>"Horse",4=>"Dog",5=>"Fish"); print_r(array_diff($a1,$a2)); ?>
六.数组与数据结构的函数
1.使用数组实现堆栈
(1).array_push(array,value1,value2...)将一个或多个单元(元素)压入数组的末尾(入栈),然后返回新数组的长度。
注释:即使数组中有字符串键名,您添加的元素也始终是数字键。(参见例子 2)
注释:如果用 array_push() 来给数组增加一个单元,还不如用 $array[] =,因为这样没有调用函数的额外负担。
注释:如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。
(2).array_pop(array)将数组最后一个单元弹出(出栈)。函数删除数组中的最后一个元素。返回弹出的值
<?php $a=array(0=>"Cat",1=>"Dog",2=>"Horse"); array_push($a,"one","two"); print_r($a); echo "<br>"; $value=array_pop($a); echo $value."<br>"; print_r($a); echo "<br>"; ?>
2.使用队列
(1).array_unshift(array,value1,value2,value3...) 函数在数组开头插入一个或多个元素。被加上的元素作为一个整体添加,这些元素在数组中的顺序和在参数中的顺序一样。该函数会返回数组中元素的个数。
注释:所有的数值键名将修改为从零开始重新计数,所有的字符串键名保持不变
(2).array_shift(array)函数删除数组中的第一个元素,并返回被删除元素的值。
注释:如果键是数字的,所有元素都将获得新的键,从 0 开始,并以 1 递增
<?php $a=array("a","b","c","d"); //在数组头加入数据 array_unshift($a,"one","two"); print_r($a); echo "<br>"; //删除数组头的数据 $value=array_shift($a); echo $value."<br>"; print_r($a); echo "<br>"; //从数组的任一一个地方删除数据 unset($a[1]); print_r($a); ?>
七.其他与数据操作有关的函数
1.array_rand(array,number)从数组中随机选出一个或多个元素,并返回。
number 可选。默认是 1。规定返回多少个随机的元素。
2.shuffle(array)把数组中的元素按随机顺序重新排列。
注释:本函数为数组中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
3.array_sum(array)计算数组中所有值的和。将字符串转化成数字
<?php $a=array(1,3,58,69,75,18,59,423); print_r($a); echo "<br>"; echo $a[array_rand($a)]."<br>"; shuffle($a); print_r($a); echo "<br>"; echo "sum=".array_sum($a); ?>
4.range(first,second,step)建立一个包含指定范围的元素的数组。
first 必需。规定数组元素的最小值。
second 必需。规定数组元素的最大值。
step 可选。规定元素之间的步进制。默认是 1。
<?php $arr=range(0,50,10); print_r($arr); echo "<br>"; $arr1=range("a","k"); print_r($arr1); ?>
PHP中的数组(二)常用数组处理函数的更多相关文章
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- php中向前台js中传送一个二维数组
在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...
- 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组
学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...
- <转载>c++中new一个二维数组
原文连接 在c++中定义一个二维数组时有多种方式,下面是几种定义方式的说明:其中dataType 表示数据类型,如int byte long... 1.dataType (*num)[n] = n ...
- 数据结构 二维数组-->稀疏数组-->二维数组
稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不 ...
- Java基本语法-----java数组(一维数组二维数组)
嘿嘿!你们懂的,又是图片,委屈大家了. java数组(一维数组二维数组) [正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个"顶"字,你就 ...
- C++中动态申请二维数组并释放方法
C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/ ...
- JavaScript笔记(二)——常用数组、字符串方法的应用
1.将字符串中的字符翻转,比如'hello',翻转成'olleh'. var arr=[]; function reverseString(str) { arr=str.split("&qu ...
- 剑指offer 1.数组 二维数组中查找
题目描述 在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序. 请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含 ...
- 如何在C++中动态建立二维数组(转)
http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...
随机推荐
- [saiku] 优化多维度查询效率
1.优化查询精度 优化原因:当维度过多时,查询很复杂,效率较慢.因此看能否通过优化sql的方式来提高查询效率. 代码跟踪查看(维度多余3时查询条件里面有in,优化不用in关键字) public abs ...
- hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)T ...
- jquery UI datepicker时间控件的使用
参考: http://api.jqueryui.com/datepicker/#method-show 英文 http://www.helloweba.com/view-blog-168.html 中 ...
- Google Chrome 源码下载地址 (Google Chrome Source Code Download)
1. Google Chrome 源码 SVN 地址:http://src.chromium.org/svn.包含有 Chrome.Gears.Webkit.GCC 等源码以及编译依赖工具.Chrom ...
- shell学习记录001-知识点储备
1.BASH(bourne again shell ) cmd1 ;cmd2等同于 cmd1 cmd2 2.echo music; 中的分号不被打印出,因为分号默认为命令定界符号 3.利用pgrep找 ...
- VBA读取固定文件夹中txt内容
Sub OneTxt() '打开一个txt文件 Dim Filename As Variant, extLine&, mArr() As String Dim i%, j%, txtpath ...
- 使用Lucene.Net管理索引实现搜索
之前使用一直是没有问题的,只到今天发现删除的时候无法删除,增加的时候却一直在增加,导致搜索的时候可以搜出来很多相同的结果. 小猪决定趁今天这个机会好好的把这个问题给解决了. private void ...
- BroadcastReceiver的实例----基于Service的音乐播放器之二
该程序的后台Service会在播放状态发生改变时对外发送广播(广播将会激发前台Activity的BroadcastReceiver):它也会采用BroadcastReceiver监听来自前台Activ ...
- Linux 中 10 个有用的命令行补全例子
在 Linux 系统中,当你输入一个命令,再按两次 TAB 键,就会列出所有以你输入字符开头的可用命令.这并不新鲜,可能你已经知道了.这个功能被称作命令行补全bash completion.默认情况下 ...
- CentOS linux 下eclipse+cdt编译报undefined reffrece to *