php 杂项(3)数组常用的方法
前言
在下列方法中,数组在进行差值、并值、元素是否存在的比较时,会将目标比对项的值先进行一个tostring的转换,目标比对项的值就必须要为可以转化成字符串的基本类型,比如array_intersect的目标对比项是比较键值那么
$a1 = [1, 2, 3]; $a2 = [1, 2, ['a']]; array_intersect($a1, $a2);//error:Array to string conversion 原因就是a2中有一个元素无法转化成string
获取数组中的所有键||所有值
array_keys(["a","b","c"]);//返回由键名组成的数组 array_values(["a","b","c"]);//返回由键值组成的数组
count(arr1) 返回数组的元素个数
判断是否存在
is_array(["a","b","c"]); //判断是否是一个数组 in_array($targetVal,["a","b","c"]); //判断键值是否存在在数组(只能匹配键值是基本类型的数组) array_key_exists($targetKey,["a","b","c"]); //判断键名是否存在数组(只能匹配键名是基本类型的数组)ps:好像php中的key都是基本类型哈
判断差值
//通过键值匹配两个数组中的差异项(相等判断使用==而非===,只进行值对比而不进行类型对比,所以1 和 '1'会认为是一致的)
$res = array_diff(['a' => 5, 'b' => '2', 'c' => 3], ['d' => 4, 'e' => '2', 'f' => 5]); //将第一个数组中的每一个元素于第二个数组中的所有元素进行匹配,如果没有在第二个数组中没有匹配到。则返回这个元素 var_dump($res);// ['c'=>3]。永远返回一个数组,如果不存在差异项,则返回空数组
//通过键名来匹配数组中的差异项(相等判断使用==而非===,只进行值对比而不进行类型对比,所以1 和 '1'会认为是一致的)
$res = array_diff_key(['a' => 1, 'b' => 2, 'c' => 3], ['a' => 1, 'b' => 2, 'f' => 3]); //将第一个素组中的每一个元素于第二个数组中的所有元素进行匹配,如果没有在第二个数组中没有匹配到。则返回这个数组 var_dump($res);// ['c'=>3] 如果没有匹配项则返回一个空数组
//通过键名和键值来匹配数组中的差异项
$res = array_diff_assoc(['a' => 2, 'b' => 3, 'f' => 3], ['a' => 1, 'b' => 2,'c'=>5,'d' => 4]); //将第一个素组中的每一个元素于第二个数组中的所有元素进行匹配,如果没有在第二个数组中没有匹配到。则返回这个元素 var_dump($res);// ['a'=>2,'b'=>3,'f'=>'3'] 如果没有匹配项则返回一个空数组
判断交集
//通过键值来查找,第一个数组中与多个数组中是存在相交的元素,(简直)
$arr1 = ['a' => 5, 'b' => 8, 'c' => 3]; $arr2 = ['a' => 1, 'b' => 2, 'c' => 4]; $res = array_intersect($arr1, $arr2);//返回存在于第二个数组中的,第一个数组内的元素,所组成的数组 var_dump($res);//无匹配项则为一个空数组,
//通过键名来查找,第一个数组中与多个数组中是存在相交的元素,
$arr1 = ['a' => 5, 'b' => 8, 'd' => 3]; $arr2 = ['a' => 1, 'b' => 2, 'c' => 4]; $res = array_intersect_key($arr1, $arr2);//返回第一个数组内中,键名同时存在第一个数组和第二个数组中的元素 var_dump($res);//无匹配项则为一个空数组,
//通过匹配键名与键值来查找,第一个数组中与多个数组中是存在相交的元素,
$arr1 = ['a' => 5, 'b' => 2, 'd' => 3]; $arr2 = ['a' => 1, 'b' => 2, 'c' => 4]; $res = array_intersect_assoc($arr1, $arr2);//返回第一个数组内中,同时存在第一个数组和第二个数组中的,键值与键名都相等元素 var_dump($res);//无匹配项则为一个空数组,
数组过滤
//根据自定义函数,来过滤匹配的数组项
$arr1 = ['a' => 5, 'b' => 2, 'd' => 3]; $res = array_filter($arr1, function ($ar) { var_dump($ar); if ($ar >= 3) { return true; } }); var_dump($res); //['a'=>5,'d'=>3] 返回所有回调函数中return true的元素
数组映射
//根据自定义函数,对每一个数组进行映射
$arr1 = ['a' => 5, 'b' => 2, 'd' => 3]; $res = array_map(function ($ar) { return ['aa' => $ar]; }, $arr1); var_dump($res); //[['aa'=>5],['aa'=>2],['aa'=>3]] //新数组的来源值为在回调函数中return的值,
//无return值 $arr1 = ['a' => 5, 'b' => 2, 'd' => 3]; $res = array_map(function ($ar) { //无 return }, $arr1); var_dump($res); //[null,null,null] //新数组的来源值为在回调函数中return的值,如果没有return则默认为return null
//多个数组进行映射
$arr1 = ['a' => 5, 'b' => 2, 'd' => 3];
$arr2 = ['a' => 5, 'b' => 2, 'd' => 3];
$res = array_map(function ($ar) { //无 return }, $arr1,$arr2);
var_dump($res); //[[null,null,null],[null,null,null]]
排序 直接修改原数组
//usort() 通过用户提供的回调函数,进行自定义排序
$arr1 = [1, 2, 3, 4, 5, 6, 7]; usort($arr1, function ($a, $b) { var_dump('<pre>', $a, $b); return $a > $b ? 1 : -1; //通过返回的是1还是-1来进行大小排序 });
合并数组
// array_merge 将多个数组合并成一个数组 ps:如果存在相同键名的元素,后面的元素会覆盖前面的元素
$arr1 = ['a' => 1, 'b' => '2']; $arr2 = ['a' => 2, 'b' => 3]; $res = var_dump(array_merge($arr1, $arr2)); //['a'=>2,'b'=>3]