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]

 

posted @ 2020-04-27 11:32  眼里有激光  阅读(260)  评论(0编辑  收藏  举报