• 【PHP】最详细PHP从入门到精通(三)——PHP中的数组常用函数汇总


     PHP从入门到精通

    之PHP中的数组常用函数详解

       数组作为PHP中最常用的结构之一,PHP强大的数组函数功能,给数组的相关操作带来了极大的便利。今天给大家介绍的PHP中数组函数,是PHP数组中重要的组成部分,其功能就是为了更便利的操作数组,以实现各种不同的功能。

       博主整理了数组中的常用的函数,为大家详细介绍各函数的功能及用法。

       

      

    PHP数组中的常用函数汇总

    为了更直观的讲解各函数的作用和用法,方便大家的理解,首先,我们来定义一个数组。下面各函数的操作将以本数组为例:

    $arr = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha");
    函数部分

    array_values($arr):用于返回数组所有的值,返回数组格式。

    var_dump(array_values($arr));

    array_keys:返回数组所有的键,返回数组。

    var_dump(array_keys($arr));

    检测数组中是否包含某个值。返回真、假
    参数: 需要查询的值,数组,true(===)或 false(==)默认

    var_dump(in_array("8", $arr,true));

    交换数组中的键和值,返回新数组。

    var_dump(array_flip($arr));


    反转数组。返回新数组。
    参数: ① 需要反转的数组,
    ② true:保留原有索引数组的下标与值的匹配(值和键,同时反转)。
    false:只翻转值,键不翻转。默认。
    无论truefalse,都不会影响关联数组,关联数组键、值永远是一对

    var_dump(array_reverse($arr,true));

    统计数组元素个数

    count($arr);

    统计数组中,所有值出现的次数。返回一个新数组
    新数组格式: 键-->原数组的值(去重后的值)
    值-->原数组对应的值出现的次数。

    var_dump(array_count_values($arr));

    移除数组中重复的值!

    var_dump(array_unique($arr));

    过滤数组中的每一个值:
    ① 不传回调函数: 过滤掉所有空值(0或""或null或false或"0"或[])
    ② 传回调函数:需要给回调函数传递一个参数,判断参数是否符合要求,如果符合,return true;否则,return false;

    var_dump(array_filter($arr,function($num){
    if($num>4){
    return true;
    }else{
    return false;
    }
    }));


    通过回调函数,对数组的每一个值,进行处理操作。(直接修改原数组,并返回bool类型的是否成功)

    执行时,会给回调函数传递两个参数,分别是数组的value,key,然后可以在回调函数中,对值和键进行处理!

    但是!!!牵扯到修改值的时候,必须要传递地址&!!!!!

    $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
    var_dump(array_walk($fruits, function(&$item, $key,$num){
    echo "{$key}-->{$item}<br>";
    $item .= $key;
    $item .= $num;
    },"10"));
    var_dump($fruits);

    将数组的每个值,交由回调函数进行映射处理。

    array_map():第一个参数,是一个回调函数。第二个参数起,是>=1个数组。

    有几个数组,可以给回调函数传几个参数,表示每个数组的一个value;

    可以对value进行处理,处理完以后通过return返回,那么新数组的对应的值就是你return回去的值。

    【array_map与array_walk的异同】
    相同点: 都能遍历数组,通过回调函数,重新处理数组的每一个值;
    不同点:① walk只能传一个数组,回调函数接收这个数组的值和键;
    map可以传多个数组,回调函数接收每个数组的值;
    ② walk直接修改原数组,而map不修改原数组,将新数组返回;
    ③ walk可以给回调函数传递一个其余参数,map只能传数组的值;
    ④ 处理方式上,walk如果需要改掉原数组的值,需在回调函数中传递地址,直接修改变量的值;
    而map,是通过将新的值,用return返回,即可修改新数组的值。

    $a = [1,2,3,4,5];
    $b = [1,2,3,4,5];
    
    $arr1 = array_map(function($value){
    return $value2;
    }, $a);
    
    $arr1 = array_map(function($value1,$value2){
    return $value1+$value2;
    }, $a,$b);
    
    var_dump($arr1);

    sort -- 对数组排序(升序):可以传入第二个参数,控制以何排序。第二个参数传1,表示按照数字排序。 第二个参数传2,表示按照字符串排序,即ascii码排序!默认会自动检测。

    rsort -- 对数组逆向排序(降序)

    usort -- 使用用户自定义的比较函数对数组中的值进行排序

    usort($arr1,function($a,$b){
    return $a-$b;// 升序
    return $b-$a;//  降序
    });

    >>> 下述3个函数,常用于关联数组排序。用法同上
    asort -- 对数组进行排序并保持索引关系
    arsort -- 对数组进行逆向排序并保持索引关系
    uasort -- 用户自定义的比较函数对数组进行排序并保持索引关联


    ksort -- 对数组按照键名排序
    krsort -- 对数组按照键名逆向排序
    uksort -- 使用用户自定义的比较函数对数组中的键名进行排序

    自然排序:数字按照0-9,字母按照a-z进行排序;
    下面两个函数,都是按照自然排序,并且排序时会保留键值关联。
    natsort -- 用“自然排序”算法对数组排序
    natcasesort -- 用“自然排序”算法对数组不区分大小写字母排序


    array_multisort -- 对多个数组或多维数组进行排序.
    第一个参数:第一个数组(必选)
    之后都是可选参数:SORT_DESCSORT_ASC(升序降序)、SORT_STRINGSORT_NUMBERIC(按照数字还是字符串排序)
    再之后,是多个可选数组;

    排序规则:先拍第一个数组,之后的数组,按照与第一个数组对应的关系,一列一列的移动!!!

    如果对多个数组排序,需保持多个数组长度一致。否则会报警告;

    $arr2 = [6,9,4,7,3,8];
    $arr3 = [6,9,4,7,3,8];
    
    $score = [89,12,78,45,3];
    $name = ["zhangsan","lisi","wangermazi","liergou","niesanfen"];
    
    array_multisort($score,SORT_DESC,SORT_NUMERIC,$name);
    
    var_dump($score);
    var_dump($name);

    array array_slice ( array array, int offset [, int length [, bool preserve_keys]] )j截取数组 :
    ① 数组,必须
    ② 从第几位开始截取,必选。负数表示,从右边数第几位;(按照数组的默认顺序,包含关联、索引数组,而不是按照下标)
    ③ 截取的长度,可选。默认,截到最后;
    ④ Boolean类是否保持键值关联,可选。默认,索引重新排序,传true保持索引关联

    $arr1 = array_slice($arr,2,5,true);
    var_dump($arr1);

    array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement ]] ) 删除或替换数组中的值:
    返回值: 被删掉的数组;
    参数:
    ① 数组的地址,会修改原数组
    ② 从第几位开始删、替换;
    ③ 删除或替换的长度
    ④ 为空,表示删除操作;传入内容,表示替换操作的新值;

    $arr = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha");
    
    $arr1 = array_splice($arr,4,5,[0,0,0,0,0,0]);
    var_dump($arr1);
    var_dump($arr);

    array_combine --  创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
    array_combine(作为键的数组,作为值的数组);
    两个数组必须保持一致,否则报警告,返回false。

    $arr1 = [1,2,3,4,5];
    $arr2 = [6,7,8,9,0];
    
    $arr3 = array_combine($arr1, $arr2);
    var_dump($arr3);


    合并数组
    array array_merge ( array array1 [, array array2 [, array ...]] )
    合并多个数组,将后面的数组拼接到前面的数组后面。
    如果多个数组中,出现同名的关联键值,则后面的会覆盖前面的。

    $arr1 = [1,2,3,"a"=>4,"10"=>5];
    $arr2 = [6,7,8,"a"=>9,"10"=>0];
    $arr3 = array_merge($arr1,$arr2);
    var_dump($arr3);


    数组取交集

    array array_intersect ( array array1, array array2 [, array ...] )


    多个数组取交集,结果会保留第一个数组的,键值关联匹配。

    $arr1 = [1,2,9,"a"=>4,5];
    $arr2 = [6,7,8,"a"=>9,"10"=>5];
    $arr3 = array_intersect($arr1, $arr2);
    var_dump($arr3);


    数组取差集
    array array_diff ( array array1, array array2 [, array ...] )
    取出多个数组中,在第一个数组中包含,但是在其他数组中不包含的值。保留第一个数组的键值关联。

    $arr1 = [1,2,9,"a"=>4,5];
    $arr2 = [6,7,8,"a"=>9,"10"=>5];
    $arr3 = array_diff($arr1, $arr2);
    var_dump($arr3);

    array_pop:删除数组最后一个值,并且返回这个值;
    array_push: 数组的最后,放入1-多个值,返回处理之后数组的元素个数。

    array_shift:删除数组第一个值,并且返回这个值;
    array_unshift:数组开头,放入1-多个值,返回处理之后数组的元素个数。

    $arr1 = [1,2,3,4,5,6,7];
    
    echo array_pop($arr1);
    
    echo array_push($arr1,[8,9],0);
    
    echo array_shift($arr1);
    
    echo array_unshift($arr1,0);
    
    var_dump($arr1);


    array_rand:随机抽取数组中的1到多个键名!!第二个参数为空,表示抽一个,传入数字表示抽n个。

    $arr1 = [1,2,3,4,5,6,7];
    var_dump(array_rand($arr1,3));


    shuffle:随机打乱数组顺序,直接修改原数组。

    $arr1 = [1,2,3,4,5,6,7];
    shuffle($arr1);
    
    var_dump($arr1);


    更改arr1数组:

    $arr1 = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha","haha",3,5);
    $arr2 = array();


    1、有一个空数组arr2: 键-->原数组去重的值 值-->原数组每个值出现的次数
    2、遍历原数组arr1:并取出arr1中的每一个值;
    3、检测:新取出的这个值,是否在arr2中,有一个同名的键。
    如果有: 说明找到了与现在新取值相重复的值。那么,就把arr2中的这个键对应的值+1;
    如果没有:说明截至现在,还没有与新取值重复的项。那么,就在arr2中新建一个同名的键,让值为1;

    foreach ($arr1 as $key1 => $value1) {
    $isHas = false;
    foreach ($arr2 as $key2 => $value2) {
    if($key2 == $value1){
    $arr2[$value1] ++;
    $isHas = true;
    }
    }
    if(!$isHas) $arr2[$value1] = 1;
    }
    
    var_dump($arr2);

    本期分享就到这里,下期再见。觉得内容不错的小伙伴请点推荐,欢迎大家在评论下方评论区与博主互动,谢谢大家!

    未完,待续。。。

     更多更全面的精彩内容,敬请关注 Q的前端世界的技术博客。

  • 相关阅读:
    【转载】10个Web3D可视化精彩案例
    基于react的audio组件
    如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
    CSS3 用border写 空心三角箭头 (两种写法)
    浅谈微信小程序对于创业者,意味着什么?
    左手Cookie“小甜饼”,右手Web Storage
    css3中user-select的用法详解
    个人感觉一些比较有用的特效例子
    纯css模拟电子钟
    蓝桥杯 ALGO-2:最大最小公倍数
  • 原文地址:https://www.cnblogs.com/liuyongqi/p/7045405.html
Copyright © 2020-2023  润新知