• 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]
  • 相关阅读:
    什么是用户画像——从零开始搭建实时用户画像(一)
    一站式Kafka平台解决方案——KafkaCenter
    Druid 0.17入门(4)—— 数据查询方式大全
    流媒体与实时计算,Netflix公司Druid应用实践
    解读银行卡支付背后的原理
    求求你了,不要再自己实现这些逻辑了,开源工具类不香吗?
    编程坑太多,Map 集合怎么也有这么多坑?一不小心又踩了好几个!
    设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!
    一口气带你踩完五个 List 的大坑,真的是处处坑啊!
    轻轻一扫,立刻扣款,付款码背后的原理你不想知道吗?|原创
  • 原文地址:https://www.cnblogs.com/wrhbk/p/12679100.html
Copyright © 2020-2023  润新知