Array Function.php常用数组函数
来源:原创
时间:2016-07-23
作者:脚本小站
分类:代码笔记
<?php //============================================================ //-----------------------数组指针----------------------------- $people = array("Bill", "Steve", "Mark", "David"); echo current($people) . "<br>"; // 当前元素是 Bill echo next($people) . "<br>"; // Bill 的下一个元素是 Steve echo current($people) . "<br>"; // 现在当前元素是 Steve echo prev($people) . "<br>"; // Steve 的上一个元素是 Bill echo end($people) . "<br>"; // 最后一个元素是 David echo prev($people) . "<br>"; // David 之前的元素是 Mark echo current($people) . "<br>"; // 目前的当前元素是 Mark echo reset($people) . "<br>"; // 把内部指针移动到数组的首个元素,即 Bill echo next($people) . "<br>"; // Bill 的下一个元素是 Steve print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针 //========================================================== //-----------------------转换为索引数组-------------------- //传入数组返回索引数组 $arr=array_values(array()) //------------------------------------------------------ //-------------------将数组值赋给变量------------------ list($a,$b)=array("a","b"); echo $a,$b; //------------------------------------------------------ //-------------------返回数组的键名-------------------- $arr=("a"=>"one","b"=>100,"c"=>"100"); //返回数组所有键名 $arr=array_keys($arr); /* Array ( [0] => a [1] => b [2] => c ) */ //返回指定数组值的键名 $arr=array_keys($arr,"one"); //返回 a //返回键名时严格按类型如 100 与 "100" $arr=array_keys($arr,"100",true); //------------------------------------------------------ //-----------------判断键名是否在数组------------------ $arr=array("one","two","three"); if(in_array("one",$arr)){ echo "exists"; }else{ echo "not exists"; } //第三个参数:严格按类型判断 in_array("one",$arr,true); //------------------------------------------------------ //---------------判断数组中是否有该键名---------------- //判断键名是否在数组中 $arr = array("one"=>"111","two"=>"222"); if(array_key_exists("one",$arr)){ echo "ok"; } //------------------------------------------------------ //----------------交换数组中的键和值------------------- $arr=array("a"=>"one","b"=>"two","c"=>"three"); $arr=array_flip($arr); /* Array ( [one] => a [two] => b [three] => c ) */ //如果有两值相同则 $arr=array("a"=>"one","b"=>"two","c"=>"two"); $arr=array_flip($arr); /* Array ( [one] => a [two] => c ) */ //------------------------------------------------------ //----------------将数组元素顺序颠倒------------------- $arr=array("a"=>"one","b"=>"two","c"=>"three"); $arr=array_reverse($arr); /* Array ( [c] => three [b] => two [a] => one ) */ //=======================统计数组相关====================== //----------------------统计数组元素----------------------- //统计数组元素 count(); //别名sizeof(); $arr=array("a"=>"one","b"=>"two",array(1,2,3,4,5,6)); //默认统计第一纬的数组 count($arr); //传入第二个参数时统计多维数组 count($arr,1); //------------------------------------------------------ //------------统计数组中各个值出现的次数-------------- $arr=array("one","two","one","three"); $arr=array_count_values($arr); /* Array ( [one] => 2 [two] => 1 [three] => 1 ) */ //------------------------------------------------------ //---------------移除数组中重复的值-------------------- $arr=array("one","two","one","three"); $arr=array_unique($arr); /* Array ( [0] => one [1] => two [3] => three ) */ //===================使用回调函数处理数组================== //---------------------------------------------------------- $arr=array(1,2,3,4,-5,6,-7,8,-9); //自定义回调函数 $arr=array_filter($arr,"fun"); //用此函数过滤掉负数 function fun($n){ if($n>0) return true; else return false; } /* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [5] => 6 [7] => 8 )*/ //用此函数取出偶数 function fun1($n){ if($n%2==0) return true; else return false; } /*Array ( [1] => 2 [3] => 4 [5] => 6 [7] => 8 )*/ //------------------------------------------------------ //---------对数组中的每个成员用回调函数处理----------- $arr=array("a"=>"one","b"=>"two","c"=>"three"); //参数:数组,回调函数,任意值(可选) array_walk($arr,"fun","=>"); //回调函数,第一个传值,第二个传键名 function fun($value,$key){ echo "key ".$key." value ".$value."<br>"; } //传入第三个值$p function fun($value,$key,$p){ echo $key.$p.$value."<br>"; } //输入应用 array_walk($arr,"fun"); function fun(&$value,$key){ $value="hello"; } print_r($arr); /*Array ( [a] => hello [b] => hello [c] => hello )*/ //------------------------------------------------------ //------------------------------------------------------ $arr=array("a","b","c","d"); /*依次将数组中的值都传入函数中,然后对每一个值进行处理后再返回*/ $arr=array_map("fun",$arr); //可传多个数组 function fun($n){ return "--".$n."--"; } print_r($arr); //Array ( [0] => --a-- [1] => --b-- [2] => --c-- [3] => --d-- ) //=========================数组排序========================= //--------------------按键值对数组进行排序----------------- //从小到大排序 $arr=array(5,6,8,2,4); //直接将原数组排序 sort($arr); //升序 print_r($arr); /*Array ( [0] => 2 [1] => 4 [2] => 5 [3] => 6 [4] => 8 )*/ //从大到小排序 rsort($arr); //降序 print_r($arr); /*Array ( [0] => 8 [1] => 6 [2] => 5 [3] => 4 [4] => 2 )*/ //------------------------------------------------------ //-----------------按键名对数组排序-------------------- $arr=array(2=>"two",5=>"five",4=>"four"); ksort($arr); //升序 print_r($arr); /*Array ( [2] => two [4] => four [5] => five )*/ krsort($arr); //降序 print_r($arr); /* Array ( [5] => five [4] => four [2] => two )*/ //------------------------------------------------------ //------------------数组排序保留键名------------------- //将数组进行排序,保留原始键名 $arr=array("1"=>"hello","two"=>"nihao","3"=>"funny"); asort($arr); //升序 print_r($arr); /*Array ( [3] => funny [1] => hello [two] => nihao )*/ arsort($arr); //降序 print_r($arr); /*Array ( [two] => nihao [1] => hello [3] => funny )*/ //------------------------------------------------------ //------------------按自然数排序----------------------- $arr=array("one1","One2","one11","one22"); natsort($arr); //区分大小写 print_r($arr); /*Array ( [1] => One2 [0] => one1 [2] => one11 [3] => one22 )*/ natcasesort($arr); //不区分大小写 print_r($arr); /*Array ( [0] => one1 [1] => One2 [2] => one11 [3] => one22 )*/ //------------------------------------------------------ //----------------自定义规则对数组排序----------------- $arr=array("Linux","Apache","MySQL","PHP"); usort($arr,"sortByLen"); //uasort() uksort() //按字符串长度进行排序 function sortByLen($one,$two){ if(strlen($one)==strlen($two)) return 0; else return (strlen($one)>strlen($two))?1:-1; } print_r($arr); /*Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache )*/ //多维数组排序 array_multisort(); //====================拆分合并分解接合数组================= //------------------------截取数组-------------------------- $arr=array("Linux","Apache","MySQL","PHP"); //将数组从第一个开始取取出两个 $arr=array_slice($arr,1,2); /*Array ( [0] => Apache [1] => MySQL )*/ //从倒数第二个开始取取两个 $arr=array_slice($arr,-2,2); /*Array ( [0] => MySQL [1] => PHP )*/ //使用第三个参数保留原有下标 $arr=array_slice($arr,-2,2,true); /*Array ( [2] => MySQL [3] => PHP )*/ //------------------------------------------------------ //------------------键名与键值组合--------------------- $arr=array("Linux","Apache","MySQL","PHP"); $arr1=array("one","two","three","four"); //第一个数组作为键名第二个数组作为键值 $arr=array_combine($arr1,$arr); print_r($arr); /*Array ( [one] => Linux [two] => Apache [three] => MySQL [four] => PHP )*/ //------------------------------------------------------- //--------------------合并数组-------------------------- $arr=array("Linux","Apache","MySQL","PHP"); $arr1=array("one","two","three","four"); $arr=array_merge($arr,$arr1); print_r($arr); /*Array ( [0] => Linux [1] => Apache [2] => MySQL [3] => PHP [4] => one [5] => two [6] => three [7] => four )*/ //------------------------------------------------------ //--------------------求数组交集----------------------- $arr=array("Linux","Apache","MySQL","PHP"); $arr1=array("Linux","hello","java","PHP"); $arr=array_intersect($arr,$arr1); print_r($arr); /*Array ( [0] => Linux [3] => PHP )*/ //------------------------------------------------------ //--------------------求数组差集----------------------- $arr=array("Linux","Apache","MySQL","PHP"); $arr1=array("Linux","hello","java","PHP"); $arr=array_diff($arr,$arr1); print_r($arr); /*Array ( [1] => Apache [2] => MySQL )*/ //====================删除数组中的元素===================== //--------------------------unset--------------------------- $arr = array("one"=>"one","two"=>"222222","222"); unset($arr['one']); print_r($arr); /*Array ( [two] => 222222 [0] => 222 ) */ //------------------------------------------------------ //------------array_splice删除数组中元素--------------- /*删除用法:参数分别为:1.数组,2.开始删除的位置(数 组下标,从0开始,可正可负,负数则倒着数),3.删除的 个数(0为全部删除),并返回被删除的元素数组*/ $arr = array("one","two","three","four","five"); $arr1 = array_splice($arr,1,2); print_r($arr1); /*Array ( [0] => two [1] => three )*/ print_r($arr); /*Array ( [0] => one [1] => four [2] => five )*/ //------------------------------------------------------ //------------array_splice替换数组中元素--------------- /*替换数组中的元素用法:参数分别为:1.被替换元素的数 组,2.开始替换的位置,3.替换的个数(0为全部替换),4.要 替换为的数组,返回被替换的数组*/ $arr1 = array("one","two","three","four","five"); $arr2 = array("xx","xxx"); $arr3 = array_splice($arr1,1,2,$arr2); print_r($arr1); /*Array ( [0] => one [1] => xx [2] => xxx [3] => four [4] => five )*/ print_r($arr3); /*Array ( [0] => two [1] => three )*/ //====================数据结构的数组函数=================== //-----------------------数组实现栈------------------------- //栈:先进先出 //入栈 $arr=array("MySQL","PHP"); array_push($arr,"one"); //向栈中压入数据 print_r($arr); /*Array ( [0] => MySQL [1] => PHP [2] => one )*/ //出栈 $arr=array("MySQL","PHP","one"); $arr=array_pop($arr); //弹出栈中的数据 print_r($arr); /* Array ( [0] => MySQL [1] => PHP )*/ //------------------------------------------------------ //--------------------数组实现堆----------------------- //堆列:先进后出 $arr=array("MySQL","PHP"); array_unshift($arr,"one"); //压入的值再前面 print_r($arr); /*Array ( [0] => one [1] => MySQL [2] => PHP )*/ //从堆头删除数据 $arr=array("MySQL","PHP","one"); array_shift($arr); //前面的值出堆 print_r($arr); /*Array ( [0] => PHP [1] => one )*/ //删除数组中的任意值 $arr=array("MySQL","PHP","one"); unset($arr[1]); print_r($arr); /*Array ( [0] => MySQL [2] => one )*/ //===================其他数组操作函数====================== //-------------------随机从数组中取值---------------------- $arr=array(4,5,6,8,2,9,7,2,56,12,78,23); //取出的是下标 $num=array_rand($arr); print_r($arr[$num]); //数组下标所对应的值 //------------------------------------------------------ //----------------随机打乱数组元素顺序---------------- $arr=array(4,5,6,8,2,9,7,2,56,12,78,23); //将原数组顺序随机打乱 shuffle($arr); print_r($arr); //------------------------------------------------------ //------------------对数组元素求和--------------------- $arr=array(4,5,6,8,2,9,7,2,56,12,78,23); echo array_sum($arr); //和为:212 //------------------------------------------------------ //------------创建一个包含指定范围的数组-------------- //参数:起始,结束,间隔 //对50从0开始裁剪,每10为一个 $arr=range(0,50,10); print_r($arr); /*Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 )*/ $arr=range("a","k"); print_r($arr); /*Array ( [0] => a [1] => b [2] => c [3] => d [4] => e )*/ //---------------------------------------------------------- //========================================================== // *********************一、数组操作的基本函数******************* // ***************************数组的键名和值*************************** array_search("apple",$arr) //在数组中检索apple ,如果存在返回键名 array_key_exists("apple",$arr)//检索给定的键名是否存在数组中 isset($arr[apple]) //检索给定的键名是否存在数组中 // ***************************数组的内部指针*************************** current($arr) //返回数组中的当前单元 pos($arr) //返回数组中的当前单元 key($arr) //返回数组中当前单元的键名 prev($arr) //将数组中的内部指针倒回一位 next($arr) //将数组中的内部指针向前移动一位 end($arr) //将数组中的内部指针指向最后一个单元 reset($arr) //将数组中的内部指针指向第一个单元 each($arr) //将返回数组当前元素的一个键名--值的构造数组, //并使数组指针向前移动一位 // ***************************数组和变量之间的转换*************************** extract($arr) //用于把数组中的元素转换成变量导入到当前文件中, //键名当作变量名,值作为变量值。 //注:(第二个参数很重要,可以看手册使用) //使用方法 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') //将一个数组填补到制定长度 // ***************************三、数组与栈*************************** array_push($arr,"apple","pear") //将一个或多个元素压入数组栈的末尾 //(入栈),返回入栈元素的个数 array_pop($arr) //将数组栈的最后一个元素弹出(出栈) // ***************************四、数组与列队*************************** array_shift($arr) //数组中的第一个元素移出并作为结果返回 //(数组长度减1,其他元素向前移动一位, //数字键名改为从零技术,文字键名不变) array_unshift($arr,"a",array(1,2)) //在数组的开头插入一个或多个元素 // ***************************五、回调函数*************************** array_walk($arr,'function','words') //使用用户函数对数组中的每个成员 //进行处理(第三个参数传递给回调函数function) array_map("function",$arr1,$arr2) //可以处理多个数组(当使用两个或更多数组时, //他们的长度应该相同) array_filter($arr,"function") //使用回调函数过滤数组中的每个元素,如果回调 //函数为TRUE,数组的当前元素会被包含在返回的 //结果数组中,数组的键名保留不变 array_reduce($arr,"function","*") //转化为单值函数(*为数组的第一个值) // ***************************六、数组的排序*************************** // ***************************通过元素值对数组排序*************************** sort($arr) //由小到大的顺序排序(第二个参数为 //按什么方式排序)忽略键名的数组排序 rsort($arr) //由大到小的顺序排序(第二个参数为按 //什么方式排序)忽略键名的数组排序 usort($arr,"function") /*使用用户自定义的比较函数对数组中的 值进行排序(function中有两个参数, 0表示相等,正数表示第一个大于第二个, 负数表示第一个小于第二个)忽略键名的数组排序*/ asort($arr) /*由小到大的顺序排序(第二个参数 为按什么方式排序)保留键名的数组排序*/ arsort($arr) /*由大到小的顺序排序(第二个参数为按 什么方式排序)保留键名的数组排序*/ uasort($arr,"function") //使用用户自定义的比较函数对数组中的值 //进行排序(function中有两个参数,0表示相等, //正数表示第一个大于第二个,负数表示第一个小 //于第二个)保留键名的数组排序 // ***************************通过键名对数组排序*************************** ksort($arr) //按照键名正序排序 krsort($arr) //按照键名逆序排序 uksort($arr,"function") //使用用户自定义的比较函数对数组中的 //键名进行排序(function中有两个参数, //0表示相等,正数表示第一个大于第二个, //负数表示第一个小于第二个) // ***************************自然排序法排序*************************** natsort($arr) //自然排序(忽略键名) natcasesort($arr) //自然排序(忽略大小写,忽略键名) // ***************************七、数组的计算*************************** // ***************************数组元素的求和*************************** array_sum($arr) //对数组内部的所有元素做求和运算 // ***************************数组的合并*************************** array_merge($arr1,$arr2) //合并两个或多个数组(相同的字符串键名, //后面的覆盖前面的,相同的数字键名, //后面的不会做覆盖操作,而是附加到后面) //“+”$arr1+$arr2 对于相同的键名只保留第一个 //(详细说明可参考:http://www.qianyunlai.com/blog/138.html) array_merge_recursive($arr1,$arr2) //递归合并操作,如果数组中有相同的字符串键名, //这些值将被合并到一个数组中去。如果一个值本 //身是一个数组,将按照相应的键名把它合并为另 //一个数组。当数组 具有相同的数组键名时,后一个 //值将不会覆盖原来的值,而是附加到后面 // ***************************数组的差集*************************** array_diff($arr1,$arr2) //返回差集结果数组 array_diff_assoc($arr1,$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)//随机种子触发器 array_rand($arr,2) //从数组中随机取出一个或 多个元素 shuffle($arr) //将数组的顺序打乱