1、array_change_key_case
array_change_key_case(array,case)函数将数组的所有的键都转换为大写字母或小写字母。array表示目标数组,case表示转成大写还是小写函数,CASE_LOWER默认表示转成小写也可以用0代替,CASE_UPPER表示转换成大写也可以用1代替
<?php header('Content-type:text/html;charset=utf8'); $arr = ['first' => 'this is first', 'SECOND' => 'this is second', 'thIRD' => 'this is third']; var_dump(array_change_key_case($arr, 0)); //输出 array(3) { ["first"]=> string(13) "this is first" ["second"]=> string(14) "this is second" ["third"]=> string(13) "this is third" } ?>
2、array_chunk
array_chunk(array,length,preserve_key)表示按照长度对数组进行折分,array表示目录数组,length表示数组拆分的长度,如果最后一组数组不够拆分,那么就返回余下的项做为一组,preserve_key表示是否指定原数组的键名为该数组的键名,true表示键名和原数组一样,false表示重新以0开头编制新键名(默认)
<?php header('Content-type:text/html;charset=utf8'); $arr = ['A' => 'first', 'B' => 'second', 'C' => 'third']; var_dump(array_chunk($arr, 2)); //输出 array(2) { // [0]=> array(2) { // [0]=> string(5) "first" // [1]=> string(6) "second" // } // [1]=> array(1) { // [0]=> string(5) "third" // } // } ?>
3、array_column
array_column表示返回输入数组中某个单一列的值。(注意:必须是多维数组)
array_column(array,column_key,index_key),array表示目标数组,column_key表示指定返回的列,index_key表示用作返回数组的索引/键的列;
<?php header('Content-type:text/html;charset=utf8'); // 表示由数据库返回的可能记录集的数组 $a = array( array( 'id' => 5698, 'first_name' => 'Bill', 'last_name' => 'Gates', ), array( 'id' => 4767, 'first_name' => 'Steve', 'last_name' => 'Jobs', ), array( 'id' => 3809, 'first_name' => 'Mark', 'last_name' => 'Zuckerberg', ) ); $last_names = array_column($a, 'last_name', 'id'); print_r($last_names); /* Array ( [5698] => Gates [4767] => Jobs [3809] => Zuckerberg ) */ ?>
4、array_combine,array_merge,array_merge_recursive
array_combine表示通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值
array_combine(keys,values),keys表示新数组的键名(数组),values表示新数组的数值(数组) 两个数组都不能为空数组,并且长度必需一致,否则返回false;
array_merge(array1,array2,array3...) 函数把一个或多个数组合并为一个数组
array_merge_recursive(array1,array2,array3...)函数把一个或多个数组合并为一个数组
区别在于 array_merge 函数的区别在于处理两个或更多个数组元素有相同的键名时。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。例子如下
<?php header('Content-type:text/html;charset=utf8'); $a = ['A', 'B', 'C']; $b = ['first', 'second', 'third']; print_r(array_combine($a, $b)); //输出 Array ( [A] => first [B] => second [C] => third ) print_r(array_merge($a, $b)); //输出 Array ( [0] => A [1] => B [2] => C [3] => first [4] => second [5] => third ) echo '<br>'; $c = ['a' => 'one', 'b' => 'two', 'c' => 'three']; $d = ['a' => 'first', 'b' => 'second', 'c' => 'third']; $all = array_merge_recursive($c, $d); print_r($all); //输出如下 //Array //( // [a] => Array // ( // [0] => one // [1] => first // ) // // [b] => Array // ( // [0] => two // [1] => second // ) // // [c] => Array // ( // [0] => three // [1] => third // ) // //) print_r(array_merge($c, $d)); //输出如下 //Array //( // [a] => first // [b] => second // [c] => third //) ?>
5、array_count_values,array_values
array_count_values(array)表示对目标数组中出现次数进行统计,返回一个新的数组
array_values(array)函数返回一个包含给定数组中所有键值的数组,但不保留键名(键名是以0开始,并以1递增)
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third', 'd' => 'first', 'e' => 'fourch']; print_r(array_count_values($a)); //输出 Array ( [first] => 2 [second] => 1 [third] => 1 [fourch] => 1 ) print_r(array_values($a)); //输出 Array ( [0] => first [1] => second [2] => third [3] => first [4] => fourch ) ?>
6、array_diff,array_diff_key 和 array_diff_assoc
array_diff() 函数返回两个数组的差集数组(注意:这个函数只比较值,不比较键,并且不改变原数组);作用=>可以用作删除数组中指定项的方法
array_diff(array1,array2...),array1表示比较的目标数组,其他的表示需要与目标数组比较的数组
而array_diff_key是只比较键名,键值不做比较,array_diff_assoc是键名和键值都比较
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; $b = ['d' => 'first', 'b' => 'fourth', 'c' => 'third']; print_r(array_diff($a, $b)); //输出 Array ( [b] => second ) print_r(array_diff_key($a, $b)); //输出 Array ( [a] => first ) print_r(array_diff_assoc($a, $b)); //输出 Array ( [a] => first [b] => second ) ?>
7、array_intersect,array_intersect_assoc 和 array_intersect_key
array_intersect(array1,array2,array3...) 函数用于比较两个(或更多个)数组的键值,并返回交集。
array_intersect_key(array1,array2,array3...)函数使用键名比较计算数组的交集。
array_intersect_assoc(array1,array2,array3...)函数用于比较两个(或更多个)数组的键名和键值,并返回交集。
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; $b = ['a' => 'first', 'b' => 'fourth', 'd' => 'third']; print_r(array_intersect($a, $b)); //输出 Array ( [a] => first [c] => third ) print_r(array_intersect_key($a, $b)); //输出 Array ( [a] => first [b] => second ) print_r(array_intersect_assoc($a, $b)); //输出 Array ( [a] => first ) ?>
8、array_fill,array_fill_keys
array_fill(start,length,value)表示用给定的键值来填充数组start表示在数组key开始的位置,length表示填充的长度,value表示填充的值,返回一个新数组
array_fill_keys(keys,value)函数使用指定的键和值填充数组。keys使用该数组的值作为键。非法值将被转换为字符串,value表示填充数组所使用的值。返回一个新数组
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; print_r(array_fill(3, 2, 'ok')); //输出 Array ( [3] => ok [4] => ok ) print_r(array_fill_keys($a, 'ok')); //输出 Array ( [first] => ok [second] => ok [third] => ok ) ?>
9、array_filter,array_reduce,array_map
array_filter(array,callback)表示用callback这个函数来过滤array这个数组,返回一个新数组。
array_reduce(array,callback,initial)该函数是进行迭代的函数,array表示目标函数,callback表示一个function里面接收两个值一个值是上次返回的值,第二个值是当前的值,initial表示初始值
array_map(callback,array)函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数。
注意:这三个函数方法的参数的位置
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; $b = array_filter($a, function () { print_r(func_get_args()); //得到的参数的数组的每一项 //输出 Array ( [0] => first ) Array ( [0] => second ) Array ( [0] => third ) return func_get_arg(0) == 'first'; }); print_r($b); //输出 Array ( [a] => first ) $c = array_map(function ($v) { print_r(func_get_args()); //得到的参数的数组的每一项 //输出 Array ( [0] => first ) Array ( [0] => second ) Array ( [0] => third ) return $v . 'add'; }, $a); print_r($c); //输出 Array ( [a] => firstadd [b] => secondadd [c] => thirdadd ) echo '<br>'; $t = array_reduce($a, function ($m, $n) { var_dump($m, $n); return $m . $n; }, 1); print_r($t); //输出的结果如下 //int(1) string(5) "first" //string(6) "1first" string(6) "second" //string(12) "1firstsecond" string(5) "third" //1firstsecondthird ?>
10、array_keys,array_key_exists,array_search,in_array
array_keys(array)返回包含数组中所有键名的一个新数组
array_key_exists(key,array)函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。key表示需要查找的键值,array表示目标数组
array_search(key,array,strict)在数组中查找值,key表示查找的值,array表示目标数组,strict表示是否按严格模式(默认是false),严格模式是指值和格式相同,如果存在则返回键,不存在返回false
in_array(key,array)判断目标数组中是否含有指定的值
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; print_r(array_keys($a)); //输出 Array ( [0] => a [1] => b [2] => c ) var_dump(array_key_exists('b', $a)); //输出 bool(true) echo '<br>'; var_dump(array_search('second', $a)); //输出 string(1) "b" echo '<br>'; var_dump(in_array('first',$a)); //输出 bool(true) ?>
11、array_flip,array_reverse,array_unique
array_flip(array)反转数组中所有的键以及它们关联的值,返回新数组,原数组不改变
array_reverse(array)以相反的元素顺序返回数组,原数组不改变
array_unique(array)移除数组中重复的值,原数组不改变
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third', 'd' => 'second']; print_r(array_flip($a)); //输出 Array ( [first] => a [second] => d [third] => c ) print_r(array_reverse($a)); //输出 Array ( [d] => second [c] => third [b] => second [a] => first ) print_r(array_unique($a)); //输出 Array ( [a] => first [b] => second [c] => third ) ?>
12、array_sum,array_product
array_sum(array)表示求数组中所有数的总和,如果是非数字,那为按0计算
array_product(array)表示求数组中所有数的乘积,如果含有非数字,那么总乘为0
<?php header('Content-type:text/html;charset=utf8'); $a = [1, 2, 3, 4, 5]; var_dump(array_product($a)); //输出 int(120) var_dump(array_sum($a)); //输出 int(15) ?>
13、array_rand,array_pad,array_slice
array_rand(array,number)函数返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组
array_pad(array,length,value)函数将指定数量的带有指定值的元素插入到数组中,array表示目标数组,length表示修改后的数组长度,value表示插入项的值
array_slice(array,start,length,preserve)函数在数组中根据条件取出一段值,并返回。array表示目标数组,start表示开始的位置,length表示截取的长度,preserve表示是否保留原有的键(默认是false即不保留)
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third', 'd' => 'fourth', 'e' => 'fifth', 'f' => 'sixth']; $b = ['first', 'second', 'third']; print_r(array_rand($a, 3)); //输出 Array ( [0] => a [1] => c [2] => d ) print_r(array_pad($b, 4, 'ok')); //输出 Array ( [0] => first [1] => second [2] => third [3] => ok ) print_r(array_slice($b, 1, 2, true)); //输出 Array ( [1] => second [2] => third ) ?>
14、array_pop,array_push,array_shift,array_unshift,array_splice
array_pop(array)删除目标数组的最后一项,返回删除的项
array_push(array,value1,value2...)函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
array_shift(array) 函数删除数组中第一个元素,并返回被删除元素的值。
array_unshift(array,value1,value2...)函数用于向数组插入新元素。新数组的值将被插入到数组的开头,然后返回新数组的长度
array_splice(array,start,length,array)函数从数组中移除选定的元素,并用新元素取代它。该函数也将返回包含被移除元素的数组,array表示目标数组,start表示删除元素的开始位置,length表示删除元素的个数,array表示需要插入到数组中的元素,如果只有一个值,那么用字符串表示即可
注意:以上方法均会改变原数组
<?php header('Content-type:text/html;charset=utf8'); $a = ['first', 'second', 'third', 'fourth', 'fifth']; array_pop($a); print_r($a); //输出 Array ( [0] => first [1] => second [2] => third [3] => fourth ) array_push($a, 'fifth', 'sixth'); print_r($a); //输出 Array ( [0] => first [1] => second [2] => third [3] => fourth [4] => fifth [5] => sixth ) array_shift($a); print_r($a); //输出 Array ( [0] => second [1] => third [2] => fourth [3] => fifth [4] => sixth ) array_unshift($a, 'zero', 'first'); print_r($a); //输出 Array ( [0] => zero [1] => first [2] => second [3] => third [4] => fourth [5] => fifth [6] => sixth ) array_splice($a, 3, 4, ['A', 'B', 'C', 'D']); print_r($a); //输出 Array ( [0] => zero [1] => first [2] => second [3] => A [4] => B [5] => C [6] => D ) ?>
15、array_replace,array_replace_recursive
array_replace(array1,array2,array3...)函数表示使用后面数组的值替换第一个数组的值。如果key值和array1中的key相同,那么值会进行覆盖否则会创建新值(相当于jquery里的$.extend)
array_replace_recursive(array1,array2,array3...)函数递归地使用后面数组的值替换第一个数组的值。如果是多维数组,但是没有明细出后面array2及以后数组的明细项,那么功能将会和array_replace一样
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; $b = ['a' => 'A', 'B', 'c' => 'C']; $t = array_replace($a, $b); print_r($t); //输出 Array ( [a] => A [b] => second [c] => C [0] => B ) echo '<br>'; $a = ['first' => ['red', 'blue'], 'second' => ['yellow', ['green']]]; $b = ['first' => ['black'], 'second' => ['white', ['pink']]]; $t = array_replace_recursive($a, $b); print_r($t); //输出如下结果 /* Array ( [first] => Array ( [0] => black [1] => blue ) [second] => Array ( [0] => white [1] => Array ( [0] => pink ) ) ) */ ?>
16、array_walk,array_walk_recursive
array_walk(array,callback,userdata...)函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。array表示目标数组,callback表示回调函数里面会接收到两个参数一个是每一项的value和key以及传入的参数,userdata表示用户传入的参数
array_walk_recursive(array,callback,userdata...)用法同上,不同之处是本方法是遍历多维数组
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => ['third']]; $b = array_walk($a, function ($v, $k, $p) { var_dump(func_get_args()); echo '<br>'; }, 'add'); //输出如下 //array(3) { [0]=> string(5) "first" [1]=> string(1) "a" [2]=> string(3) "add" } //array(3) { [0]=> string(6) "second" [1]=> string(1) "b" [2]=> string(3) "add" } //array(3) { [0]=> array(1) { [0]=> string(5) "third" } [1]=> string(1) "c" [2]=> string(3) "add" } $b = array_walk_recursive($a, function ($v, $k, $p) { var_dump(func_get_args()); echo '<br>'; }, 'add'); //输出如下 //array(3) { [0]=> string(5) "first" [1]=> string(1) "a" [2]=> string(3) "add" } //array(3) { [0]=> string(6) "second" [1]=> string(1) "b" [2]=> string(3) "add" } //array(3) { [0]=> string(5) "third" [1]=> int(0) [2]=> string(3) "add" } //多维数组转换成一维数组 $all = []; $array = [ 'name' => 'xiaoming', 'age' => 30, 'class' => [ 'lan' => ['set' => 'ok'], 'get' => 'hello' ] ]; //注意引用 array_walk_recursive($array, function ($value, $key) use (&$all) { $all[$key] = $value; }); print_r($all); //输出 Array ( [name] => xiaoming [age] => 30 [set] => ok [get] => hello ) ?>
17、extract,list,shuffle
extract(array,extract_rules,prefix)表示函数从数组中将变量导入到当前的符号表,array表示目标数组,extract_rules表示对变量名称的检查,并做处理,prefix表示在变量前加前缀(后面两个参数是可选的)
list(val1,val2,val3...)表示函数用于在一次操作中给一组变量赋值,注意:该函数只用于数字索引的数组,且假定数字索引从 0 开始
shuffle(array)表示函数把数组中的元素按随机顺序重新排列,shuffle会改变原有数组
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; extract($a); echo $a, $b, $c; //输出 firstsecondthird $b = ['are', 'you', 'ok']; list($first, $second, $third) = $b; var_dump($first, $second, $third); //输出 string(3) "are" string(3) "you" string(2) "ok" $t = shuffle($b); print_r($b); //输出 Array ( [0] => you [1] => are [2] => ok ) ?>
18、compact,range
compact(val1,val2,val3...)函数创建包含变量名和它们的值的数组(与extract相对)
range(low,high,step)函数创建一个包含指定范围的元素的数组,low表示数组的最低值,high表示数组的最高值,step表示数组的步长,默认是1
当range('a','z',1),那么会实现一个a-z填充的数组,range('A','Z',1),那么会出现一个A-Z的填充数组
<?php header('Content-type:text/html;charset=utf8'); $a = 'first'; $b = 'second'; $c = 'third'; print_r(compact('a', 'b', 'c')); //输出 Array ( [a] => first [b] => second [c] => third ) print_r(range(0, 5, 2)); //输出 Array ( [0] => 0 [1] => 2 [2] => 4 ) ?>
19、count,end,reset
count(array)返回数组的长度
end(array)返回目标数组的最后一项,并且把当前指针指向最后一项
reset(array)返回目标数组的第一项,并且把当前指针指向第一项
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; var_dump(count($a)); //输出 int(3) var_dump(end($a)); //输出 string(5) "third" var_dump(reset($a)); //输出 string(5) "first" ?>
20、current,next,prev,key
current(array)表示当前数组的指针指向的当前元素的值
next(array)表示把指针向下移一个单位,并且返回指向元素的值,如果没有则返回false
prev(array)表示把指针向上移一个单位,并且返回指向元素的值,如果没有则返回false
key(array) 返回当前指针指向元素的key值,如果没有返回false
<?php header('Content-type:text/html;charset=utf8'); $a = ['a' => 'first', 'b' => 'second', 'c' => 'third']; var_dump(current($a)); //输出 string(5) "first" var_dump(next($a)); //输出 string(6) "second" var_dump(key($a)); //输出 string(1) "b" var_dump(prev($a)); //输出 string(5) "first" ?>
21、array_multisort
sorting type分别有SORT_REGULAR,SORT_NUMERIC,SROT_STRING三种常用的类型(会改变原数组)
array_multisort(array1,sorting order,sorting type,array2,array3...)表示对数组进行排序,改变的是原数组,array1表示目标数组,sorting order表示排列的顺序,sorting type表示排列的依据
<?php header('Content-type:text/html;charset=utf8'); $a = [1, 3, 5, 13, 7]; $t = array_multisort($a, SORT_ASC); print_r($a); //输出 Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 13 ) ?>
对数级里的数级或者对象进行排序
<?php header('content-type:text/html;charset=utf8'); ini_set('display_errors', true); class A { public $name; public $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } $p1 = new A('aaa', 12); $p2 = new A('bbb', 8); $p3 = new A('ccc', 32); $p4 = new A('ddd', 34); $p5 = new A('eee', 28); $array = compact('p1', 'p2', 'p3', 'p4', 'p5'); $age = array_column($array, 'age'); array_multisort($age, SORT_ASC, SORT_NUMERIC, $array); var_dump($array); ?>
<?php header('content-type:text/html;charset=utf8'); ini_set('display_errors', true); $data[] = array('volume' => 67, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 1); $data[] = array('volume' => 85, 'edition' => 6); $data[] = array('volume' => 98, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 6); $data[] = array('volume' => 67, 'edition' => 7); $volume = array_column($data, 'volume'); $edition = array_column($data, 'edition'); array_multisort($volume, SORT_DESC, SORT_NUMERIC, $edition, SORT_ASC, SORT_NUMERIC, $data); echo '<pre>'; var_dump($data); //输出 //volume | edition //-------+-------- // 98 | 2 // 86 | 1 // 86 | 6 // 85 | 6 // 67 | 2 // 67 | 7 ?>
22、asort,ksort,arsort,krsort
sorting type分别有SORT_REGULAR,SORT_NUMERIC,SROT_STRING三种常用的类型,并且这几个数据改变的是原数组
asort(array,sortingtype)函数对关联数组按照键值进行升序排序。array表示目标数组,sortingtype表示排列的依据
ksort(array,sortingtype)函数对关联数组按照键名进行升序排序。
arsort(array,sortingtype)函数对关联数组按照键值进行降序排序。
krsort(array,sortingtype)按照键名对关联数组进行降序排序。
<?php header('Content-type:text/html;charset=utf8'); $a = [1, 3, 5, 13, 7]; asort($a, SORT_NUMERIC); print_r($a); //输出 Array ( [0] => 1 [1] => 3 [2] => 5 [4] => 7 [3] => 13 ) arsort($a, SORT_NUMERIC); print_r($a); //输出 Array ( [3] => 13 [4] => 7 [2] => 5 [1] => 3 [0] => 1 ) ksort($a, SORT_NUMERIC); print_r($a); //输出 Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 13 [4] => 7 ) krsort($a, SORT_NUMERIC); //输出 Array ( [4] => 7 [3] => 13 [2] => 5 [1] => 3 [0] => 1 ) ?>
23、uasort,uksort
uasort(array,callback)根据自定义的回调对数组的值进行排序
uksort(array,callback)根据自定义的回调对数组的键名进行排序
<?php header('Content-type:text/html;charset=utf8'); $a = [1, 3, 5, 13, 7, 4, 6, 8]; uasort($a, function ($m, $n) { return $m > $n ? 1 : -1; }); //输出 Array ( [0] => 1 [1] => 3 [5] => 4 [2] => 5 [6] => 6 [4] => 7 [7] => 8 [3] => 13 ) uksort($a, function ($m, $n) { return $m > $n ? 1 : -1; }); print_r($a); //输出 Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 13 [4] => 7 [5] => 4 [6] => 6 [7] => 8 ) ?>