一、键、值操作函数
1、array_values($contact):
不保留键名,按照索引,对数组排列
2、array_keys($contact, '可选参数', '可选参数true/false'):
若设置可选参数,则按照可选参数返回键名,若不设置,直接返回数组的键名,false为不依赖默认参数类型
3、in_array('value', '$contact', '可选参数true/false'):
检查数组中是否存在某值, true类型必须完全一致,搜索值若为字符串,设置true后,则区分大小
4、array_search(value, array, '可选参数true/false'):
array_search()函数与in_array()一样,在数组中查找一个键值。如果找到了该值,则返回匹配该元素所对应的键名。如果没找到,则返回 false。注意在 PHP 4.2.0 之前,函数在失败时返回 null 而不是 false。同样如果第三个参数被指定为true,则只有在数据类型和值都一致时才返回相应元素的键名。
5、array_key_exists(key, array):
判断某个数组array中是否存在指定的key,如果该key存在,则返回true,否则返回false
6、array_flip($contact):
array_flip()返回一个反转后的array。该函数会将数组的键名和元素值互换,如果一个值多次出现,最后一个键名为它的值。
例如 $contact中的 键名 变成了 值,而 $contact中的 值 则变成了 键名。
注意:$contact中的值需要能够作为合法的键名,例如 需要是 integer 或者 string。如果值的类型不对将发出一个警告,并且有问题的键/值对将不会反转。如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了。
该函数适用场景举例:可用作去重
7、array_reverse($contact, '可选参数true/false'):
将数组顺序翻转,true保持键名不变。
array_reverse()接受数组 $contact 作为输入 并返回一个单元为相反顺序的新数组,如果 第二个参数为true 则保留原来的键名。如果为false 则键名丢失
8、array_column(input, column_key, index_key):
array_column() 返回input数组中键值为column_key的列,如果指定了可选参数index_key,那么input数组中的 这一列的值 将作为返回数组中对应值的键。
参数:
input:需要取出数组列的多维数组。 如果提供的是包含一组对象的数组,只有 public 属性会被直接取出。 为了也能取出 private 和 protected 属性,类必须实现 __get() 和 __isset() 魔术方法。
column_key:需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是null,此时将返回整个数组(配合index_key参数来重置数组键的时候,非常管用)
index_key:作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
返回值:
从多维数组中返回单列数组。
9、compact(var1, var2...)
创建一个包含变量名和它们的值的数组。
compact()函数 创建一个由参数所带变量组成的数组。 如果参数中存在数组,该数组中变量的值也会被获取。 本函数返回的数组是一个关联数组,键名为函数的参数,键值为参数中变量的值。 本函数执行的行为与extract() 正好相反
<?php //创建一个包含变量名和它们的值的数组: $firstname = "Peter"; $lastname = "Griffin"; $age = "41"; $result = compact("firstname", "lastname", "age"); print_r($result); 输出:Array ( [firstname] => Peter [lastname] => Griffin [age] => 41 ) //使用没有对应变量名的字符串,以及一个变量名数组: <?php $firstname = "Peter"; $lastname = "Griffin"; $age = "41"; $name = array("firstname", "lastname"); $result = compact($name, "location", "age"); print_r($result); 输出:Array ( [firstname] => Peter [lastname] => Griffin [age] => 41 )
二、数组元素个数有关的函数
1、count($contact, '可选参数0/1'):
统计数组的元素个数,可选参数表示是否递归的检测多维数组,0为不检测,1为检测
2、array_count_values($contact):
统计数组元素出现的次数,输出数组,键名为元素值,值为键名出现次数
3、array_unique($contact):
删除数组中的重复元素值,重复的元素,键名保留第一个元素的键名
三、使用回调函数处理数组的函数
1、array_filter(array $array [, callable $callback [, int $mode = 0 ]] )
用回调函数过滤数组中的元素
依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
参数:
array:要循环遍历的数组
callback:使用的回调函数。如果没有提供 callback 回调函数,将删除 array 数组中的所有“空”元素。 有关 PHP 如何判定“空”元素,请参阅 empty() 。
mode:决定callback接收的参数形式,如下:
①、ARRAY_FILTER_USE_KEY - 将键名作为 callback 回调的唯一参数,而不是值
②、ARRAY_FILTER_USE_BOTH - 将值和键都作为参数传递给 callback 回调,而不是仅传递值
默认值为 0,只传递值作为 callback 回调的唯一参数。
返回值:
返回过滤后的数组。
2、array_map('回调函数',$contact, '之后可选参数数组$contact1'):
array_map()函数 将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组,若函数作用后无返回值,则对应的新值数组中为空。
回调函数 接受的参数数量 应该和传递给 array_map() 函数的数组数量一致。
您可以向函数输入一个或者多个数组。若向函数输入2个数组,其回调函数参数也应该有两个,map给函数传值时,是每次从两个数组中分别取一个传给函数。即多个数组之间是同步提交的,不是提交完一个数组再提交下一个。
语法:array array_map ( callable callback,arrayarr1 [, array $… ] )
<?php //单数组形式 function myfunction($v) { if($v==="Dog") { return "Fido"; } return $v; } $a = array("Horse","Dog","Cat"); print_r(array_map("myfunction", $a)); //多数组形式 function myfunction1($v1,$v2) { if($v1===$v2) { return "same"; } return "different"; } $a1 = array("Horse", "Dog", "Cat"); $a2 = array("Cow", "Dog", "Rat"); print_r(array_map("myfunction1", $a1, $a2));
3、array_walk(array|object &$array, callable $callback, mixed $arg = null): bool
使用 用户自定义函数 对数组中的每个 元素 做回调处理。在函数中,数组的键名和键值是参数。
您可以通过把用户自定义函数中的第一个参数指定为引用:&$value,来改变数组元素的值。这样任何对这些元素的改变也将会改变原始数组本身。
提示:如需操作更深的数组(一个数组中包含另一个数组),请使用 array_walk_recursive() 函数。
array_walk()函数 对数组中的每个元素应用回调函数。如果成功则返回 true,否则返回 false。
典型情况下 myfunction 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 arg,将被作为第三个参数传递给回调函数。
如果 myfunction 函数 需要的参数比给出的多,则每次 array_walk() 调用 myfunction 时都会产生一个 E_WARNING 级的错误。这些警告可以通过在 array_walk() 调用前加上 PHP 的错误操作符 @ 来抑制,或者用 error_reporting()。
<?php $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); //传引用,改变了所传参数组 function test_alter(&$item1, $key, $prefix) { $item1 = "$prefix: $item1"; } function test_print($item2, $key) { echo "$key. $item2<br />\n"; } echo "Before ...:\n"; //单数组 array_walk($fruits, 'test_print'); //带额外参数 array_walk($fruits, 'test_alter', 'fruit'); echo "... and after:\n"; array_walk($fruits, 'test_print');
输出结果如下:
Before ...: d. lemon a. orange b. banana c. apple ... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple
4、array_map与array_walk区别:
map 主要是为了得到你的回调函数处理后的新数组,要的是结果
walk 主要是对每个参数都使用一次你的回调函数,要的是处理的过程
walk 可以认为提供额外参数给回调函数,map不可以
walk 主要是要对数组内的每个值进行操作,操作结果影响原来的数组
map 主要是对数组中的值进行操作后返回数组,以得到一个新数组
walk 可以没有返回值 map要有,因为要填充数组
四、数组的排序函数
1、sort()和rsort()
数组内部元素从小到大排序
数组内部元素从大到小排序
2、ksort()和krsort()
根据键名对数组排序
按照键名从小到大排序
按照键名从大到小排序
3、asort()和arsort()
按照元素值排序,保留键名
4、natsort()和natcasesort()
根据自然排序法对数组排序,按照数字从1到9,字母从a到z的排序方法,前者忽略键名,后者保留键名,并且前者区分大小写,后者不区分大小写
5、usort()
使用 用户自定义的比较函数 对数组中的值进行排序。
usort排序函数的返回值老是记不住返回1的时候是按升序还是降序排?网上搜了一大堆也没个能说明白的。 直到今天看到了一个说法:
usort函数执行的时候,会依次把$a中的两个值 传递给名字为my_sort函数中,所以你会看到my_sort有两个形参,然后php会判断my_sort函数的返回值:
如果为0,则位置不变
如果为-1,则$a位置和$b不变
如果为1,则$a位置和$b互换
所以我们只需要根据 我们自定义函数 返回的是-1 还是 1 来记,返回1,则表示usort函数会帮我们交换a和b 的位置。返回-1 则不交换 a和b 的位置。
<?php /******以下是进行降序排序******/ $arr = [1,6,5,3,4,2]; //我们这里在 a < b 的时候返回1,表示我们希望a < b 的时候usort函数帮我们交换a,b ,交换后 a和b的大值就会出现在前面。从而达到降序排列数组的目的。 usort($arr, function($a, $b) { return $a < $b ? 1 : -1; }); print_r($arr); //输出如下: Array ( [0] => 6 [1] => 5 [2] => 4 [3] => 3 [4] => 2 [5] => 1 ) /******以下是进行升序排序******/ $arr = [1,6,5,3,4,2]; //a小于b的时候返回-1,说明a < b的时候不需要交换。说明最后是按升序排序。 usort($arr, function ($a, $b) { return $a < $b ? -1 : 1; }); print_r($arr); //输出如下: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
6、uksort()
使用 用户自定义的比较函数 对数组中的键名进行排序。
7、array_multisort()
<?php //下面的两个例子对二维数组进行排序 /******用法一:不需要遍历数组就可以对二维数组排序******/ $data = [ ['a' => 23, 'b' => 'hhhh', 'c' => '2013-12-23'], ['a' => 26, 'b' => 'hkkk', 'c' => '2013-12-26'], ['a' => 20, 'b' => '565', 'c' => '2013-12-28'], ['a' => 29, 'b' => 'fhj', 'c' =>' 2013-11-23'], ['a' => 10, 'b' => 'fffff', 'c' => '2013-12-24'], ]; // 取'a'列数据进行升序排列 array_multisort(array_column($data, 'a'),SORT_ASC, $data); print_r($data); //输出结果如下: Array ( [0] => Array ( [a] => 10 [b] => fffff [c] => 2013-12-24 ) [1] => Array ( [a] => 20 [b] => 565 [c] => 2013-12-28 ) [2] => Array ( [a] => 23 [b] => hhhh [c] => 2013-12-23 ) [3] => Array ( [a] => 26 [b] => hkkk [c] => 2013-12-26 ) [4] => Array ( [a] => 29 [b] => fhj [c] => 2013-11-23 ) ) /******用法二:通常用法******/ $data = [ ['volume' => 67, 'edition' => 2], ['volume' => 86, 'edition' => 1], ['volume' => 85, 'edition' => 6], ['volume' => 98, 'edition' => 2], ['volume' => 86, 'edition' => 6], ['volume' => 67, 'edition' => 7], ]; $volume = []; $edition = []; foreach($data as $key => $row) { $volume[$key] = $row['volume']; $edition[$key] = $row['edition']; } array_multisort($volume,SORT_DESC, $edition,SORT_ASC, $data); print_r($data); //输出结果如下: Array ( [0] => Array ( [volume] => 98 [edition] => 2 ) [1] => Array ( [volume] => 86 [edition] => 1 ) [2] => Array ( [volume] => 86 [edition] => 6 ) [3] => Array ( [volume] => 85 [edition] => 6 ) [4] => Array ( [volume] => 67 [edition] => 2 ) [5] => Array ( [volume] => 67 [edition] => 7 ) )
8、shuffle($arr)
函数把数组中的元素按随机顺序重新排列。若成功,则返回 true,否则返回 false。
注释:本函数为数组中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
<?php $my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse"); shuffle($my_array); print_r($my_array); 输出: Array ( [0] => Cat [1] => Horse [2] => Dog )
9、array_rand($array, $number)
array_rand()函数 从数组中随机选出一个或多个元素,并返回。
第二个参数用来确定要选出几个元素。如果选出的元素只有一个,返回该元素的键名(注意是键名不是键值)。
注释:如果指定array_rand()函数选取的元素个数大于1,那么不管抽取的是数字索引数组还是关联数组,都将取得原数组的key(注意是key),并放在一个新的索引数组中。
$a = array("a" => "Dog", "b" => "Cat", "c" => "Horse"); print_r(array_rand($a,1)); 输出: b $a=array("a" => "Dog", "b" => "Cat", "c" => "Horse"); print_r(array_rand($a,2)); 输出: Array ( [0] => c [1] => b )
五、拆分,合并,分解,结合数组
1、array_slice($contact, '取出元素的初始值', '可选择参数:取出元素的长度', '可选择参数:true/false'):
取出元素的初始值若为正值,则从前往往后取,负数则从前向后取,最后一个元素为-1,则从负数值开始往后取。true将保留键名
2、array_splice($contact, '删除元素的初始值', '删除元素的长度', '可选参数:替换数组'):
初始值如果是正数,则从此值开始删除,负数跟slice()同理,如设置替换数组,则将替换数组插入删除的位置。
3、array_combine($contact1, $contact2):
创建一个数组,用第一个数组元素的值作为其键名,第二个数组元素的值作为其值
4、array_merge($contact1, $contact2, [,...]):
第一个参数为必选参数,仅有一个会以索引数组的形式输出。多个数组合并,键名重复,后面的会覆盖前面的。
然后再说一下 数组的 + 加号运算符 和 array_merge的区别在于:遇到相等key时,用+时,左边数组会覆盖掉右边数组的值,array_merge相反,后面的数组覆盖掉前面的
5、array_intersect($contact1, $contact2, [,...]):
数组的交集,键名不变,仅数组值进行比较,输出第一个数组中 二者共同有的
<?php $a1 = array("a" => "red", "b" => "green", "c" => "blue", "d" => "yellow"); $a2 = array("e" => "red", "f" => "green", "g" => "blue"); $result=array_intersect($a1, $a2); print_r($result); #输出:Array ( [a] => red [b] => green [c] => blue ) $a1 = array("a" => "red" , "b" => "green", "c" => "blue", "d" => "yellow"); $a2 = array("e" => "red" , "f" => "black", "g" => "purple"); $a3 = array("a" => "red" , "b" => "black", "h" => "yellow"); $result=array_intersect($a1, $a2, $a3); print_r($result); #输出:Array ( [a] => red )
6、array_diff($contact1, $contact2, $contact3):
数组的差集,第一个数组和第二个参数为必选的参数,第三个参数乃至于以后可选,输出第一个数组中有,其他数组没有的值
<?php $a1 = array("a" => "red", "b" => "green", "c" => "blue", "d" => "yellow"); $a2 = array("e" => "red", "f" => "green", "g" => "blue"); $result = array_diff($a1, $a2); print_r($result); # 输出:Array ( [d] => yellow ) $a1 = array("a" => "red", "b" => "green", "c" => "blue", "d" => "yellow"); $a2 = array("e" => "red", "f" => "black", "g" => "purple"); $a3 = array("a" => "red", "b" => "black", "h" => "yellow"); $result = array_diff($a1, $a2, $a3); print_r($result); # 输出:Array ( [b] => green [c] => blue )
六、获取数组中第一个元素或最后一个元素
1、第一种情况(从数组中取出,则数组不在存在)
$first = array_shift($arr);
$last = array_pop($arr);
2、第二种情况(从数组中取出,数组中还存在)
$first = current($arr); 或 $first = reset($arr);
$last = end($arr) ; 或 $last = array_slice($arr, -1, 1);
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论