zoukankan      html  css  js  c++  java
  • PHP中的数组(二)常用数组处理函数

    数组的相关处理函数
        一.数组键/值操作有关的函数
            1.array_values()   无论是关联的还是索引的返回的都是索引数组

     1 <?php
     2 $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php");
     3 
     4 $arr=array_values($lamp);
     5 
     6 list($os,$wb,$db,$lang)=$arr;
     7 
     8 echo $os."<br>";
     9 echo $wb."<br>";
    10 echo $db."<br>";
    11 echo $lang."<br>";
    12 
    13 echo "<pre>";
    14 print_r($arr);
    15 echo "<pre>";
    16 ?>

            2.array_keys(array,value)      返回键名
                array  必需。规定输入的数组。
                value  可选。指定值的索引(键)。

    1 <?php
    2 $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php");
    3 
    4 $arr=array_keys($lamp,);
    5 
    6 echo "<pre>";
    7 print_r($arr);
    8 echo "<pre>";
    9 ?>

            3.in_array(value,array,type)   函数在数组中搜索给定的值
                value   必需。规定要在数组搜索的值。
                array   必需。规定要搜索的数组。
                type    可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

    <?php
    $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",array("a","b"));
    
    if(in_array(array("a","b"),$lamp)){
        echo "存在!";
    }else{
        echo "不存在!";
    }
    ?>

            4.array_key_exists(key,array) 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。    
                key    必需。规定键名。
                array  必需。规定输入的数组。

    <?php
    $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",array("a","b"));
    
    if(array_key_exists("os",$lamp)){
        echo "存在!";
    }else{
        echo "不存在!";
    }
    ?>


            5.array_flip(array) 交换数组中的键和值.  函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失。

    <?php
    $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",10=>"Linux");
    
    $arr=array_flip($lamp);
    
    echo "<pre>";
    print_r($arr);
    echo "<pre>";
    ?>

             6.array_reverse(array,preserve)  将原数组中的元素顺序翻转,创建新的数组并返回。
                 preserve   可选。规定是否保留原始数组的键名。可能的值:true(是) 和 false。

    <?php
    $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php");
    
    $arr=array_reverse($lamp);
    
    echo "<pre>";
    print_r($arr);
    echo "<pre>";
    ?>

        二.统计数组元素的个数和唯一性
            1.count(array,mode)  sizeof(array,mode);   统计数组的长度
                mode   可选。规定函数的模式。可能的值:
                            0 - 默认。不检测多维数组(数组中的数组)。
                            1 - 检测多维数组。

    <?php
    $arr=array("id"=>1,"name"=>"zhangsan","age"=>20,"sex"=>"nan",array(1,2,3,4,5,6));
    
    echo "conut()--->".count($arr,1);
    echo "<br>";
    echo "sizeof()--->".sizeof($arr,1);
    ?>

            2.array_count_values()   用于统计数组中所有值出现的次数。
                本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。

    <?php
    $arr=array("id1"=>1,"id2"=>1,"name"=>"zhangsan","age"=>20,"sex"=>"nan");
    
    $a=array_count_values($arr);
    
    echo "<pre>";
    print_r($a);
    echo "<pre>";
    ?>

            3.array_unique   删除数组中重复的值,并返回结果数组。被返回的数组将保持第一个数组元素的键类型

    <?php
    $a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat");
    
    print_r(array_unique($a));
    ?>

        三.使用回调函数处理数组的函数
            1.array_filter(array,function)    用回调函数过滤数组中的元素。如果自定义过滤函数返回 true,则被操作的数组的当前值就会被包含在返回的结果数组中, 并将结果组成一个新的数组。如果原数组是一个关联数组,键名保持不变。
                function   必需。自定义函数的名称。

    <?php
    $arr=array(1,-2,3,-4,5,-6,7,8,9,10,11,12);
    
    $a=array_filter($arr,"myfun");
    
    function myfun($n){
        if($n>0){
            return true;
        }else{
            return false;
        }
    }
    
    echo "<pre>";
    print_r($a);
    echo "<pre>";
    ?>

            2.array_walk(array,function,userdata...)     对数组中的每个成员应用用户函数。如果成功则返回 TRUE,否则返回 FALSE。
                function   必需。用户自定义函数的名称。
                serdata    可选。用户输入的值,可作为回调函数的参数。

    <?php
    $lamp=array("os"=>"Linux","wb"=>"Apache","db"=>"MySql","la"=>"php");
    
    array_walk($lamp,"myfun");
    
    function myfun($value,$key){
        echo $key."--->".$value."<br>";
    }
    ?>

            3.array_map(function,array1,array2,array3...)   将回调函数作用到给定数组的单元上。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

    <?php
    $lamp=array("os"=>"Linux","wb"=>"Apache","db"=>"MySql","la"=>"php");
    
    $arr=array_map("myfun",$lamp);
    
    function myfun($n){
        return $n."==";
    }
    echo "<pre>";
    print_r($arr);
    echo "<pre>";
    ?>

        四.数组的排序函数
            sort()
            rsort()
            usort()
            asort()
            arsort()
            uasort()
            ksort()
            krsort()
            uksort()
            hatsort()
            natcasesort()
            array_multisort()

            1.简单的数组排序
                sort(array,sorttype)   函数按升序对给定数组的值排序。键名改变
                    sorttype  可选。规定如何排列数组的值。可能的值:
                        SORT_REGULAR - 默认。以它们原来的类型进行处理(不改变类型)。
                        SORT_NUMERIC - 把值作为数字来处理
                        SORT_STRING - 把值作为字符串来处理
                        SORT_LOCALE_STRING - 把值作为字符串来处理,基于本地设置*。
                rsort(array,sorttype)函数对数组逆向排序,键名改变

    <?php
    $data=array(1,3,2,8,4,7);
    
    sort($data);
    
    echo "<pre>";
    print_r($data);
    echo "<pre>";
    
    $data1=array("a"=>"cfr","c"=>"brtd","b"=>"adefex");
    
    rsort($data1);
    
    echo "<pre>";
    print_r($data1);
    echo "<pre>";
    ?>

            2.根据键名对数组排序
                ksort(array,sorttype)函数对数组按照键名排序,为数组值保留原来的键
                krsort(array,sorttype)函数对数组按照键名逆向排序,为数组值保留原来的键

    <?php
    $arr=array("a"=>"bder","c"=>"adef","b"=>"cderf");
    
    ksort($arr);
    
    echo "<pre>";
    print_r($arr);
    echo "<pre>";
    
    krsort($arr);
    
    echo "<pre>";
    print_r($arr);
    echo "<pre>";
    ?>

            3.根据元素的值对数组进行排序
                asort(array,sorttype)函数对数组进行排序并保持索引关系,键名不变
                arsort(array,sorttype)函数对数组进行逆向排序并保持索引关系,键名不变

    <?php
    $my_array = array("a"=>"Dog","b"=>"Cat","c" =>"Horse");
    
    asort($my_array);
    echo "<pre>";
    print_r($my_array);
    echo "<pre>";
    
    arsort($my_array);
    echo "<pre>";
    print_r($my_array);
    echo "<pre>";
    ?> 

            4.根据“自然数排序”法读数组排序
                natsort(array)函数用“自然排序”算法对数组进行不区分大小写字母的排序。
                natcasesort(array)函数用“自然排序”算法对数组排序。

    <?php
    $my_array = array("file1.txt","file11.txt","file2.txt","File22.txt");
    
    echo "用sort排序:";
    sort($my_array);
    echo "<pre>";
    print_r($my_array);
    echo "<pre>";
    
    echo "用natsort排序:";
    natsort($my_array);
    echo "<pre>";
    print_r($my_array);
    echo "<pre>";
    
    echo "用natcasesort排序:";
    natcasesort($my_array);
    echo "<pre>";
    print_r($my_array);
    echo "<pre>";
    ?> 

            5.用户自定义规则对数组排序
                usort(array,function)函数使用用户自定义的比较函数对数组中的值进行排序,会删除原来的键名
                    function必需。用户自定义的函数。
                            函数必须设计为返回 -1, 0, 或 1,并应该接受两个供比较的参数,同时以类似下面这样的方式来工作:
                            如果 a = b, 返回 0
                            如果 a > b, 返回 1
                            如果 a < b, 返回 -1
                uasort(array,function)函数使用用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。
                uksort(array,function)函数使用用户自定义的比较函数对数组中的键名进行排序,,并保持索引关联(不为元素分配新的键)

    <?php
    $arr=array("Linux","Apache","MySql","Php");
    
    usort($arr,"sortbylen");
    
    //用户自定义按照字符串长度排序函数
    function sortbylen($one,$two){
        if(strlen($one)==strlen($two))
            return 0;
        return (strlen($one)>strlen($two))?1:-1;
    }
    
    echo "<pre>";
    print_r($arr);
    echo "<pre>";
    ?>

            6.多维数组的排序
                array_multisort(array1,sorting order,sorting type,array2,array3...)函数对多个数组或多维数组进行排序。
                    array1          必需。规定输入的数组。
                    sorting order   可选。规定排列顺序。可能的值是 SORT_ASC(默认,按升序排列。(A-Z)) 和 SORT_DESC( 按降序排列。(Z-A) )。
                    sorting type    可选。规定排序类型。可能的值是SORT_REGULAR(默认。将每一项按常规顺序排列。)、SORT_NUMERIC(将每一项按数字顺序排列。)和SORT_STRING( 将每一项按字母顺序排列。)。
                    array2          可选。规定输入的数组。
                    array3          可选。规定输入的数组。

    <?php
    $a1=array("Aog","Dog","Cat");
    $a2=array("Pluto","Fido","Missy");
    
    array_multisort($a1,$a2);
    
    print_r($a1);
    print_r($a2);
    ?>

        五.数组的拆分、合并、分解、接合的函数
            1.array_slice(array,offset,length,preserve)在数组中根据条件取出一段值,并返回。
                  offset     必需。数值。规定取出元素的开始位置。
                             如果是正数,则从前往后开始取,如果是负值,从后向前取 offset 绝对值。
                  length     可选。数值。规定被返回数组的长度。
                             如果是负数,则从后向前,选取该值绝对值数目的元素。如果未设置该值,则返回所有元素。
                  preserve   可选。可能的值:
                                  true - 保留键
                                  false - 默认 - 重置键

    <?php
    $arr=array("a","b","c","d");
    
    print_r(array_slice($arr,1,2));
    echo "<br>";
    print_r(array_slice($arr,-2,1));
    echo "<br>";
    print_r(array_slice($arr,1,2,true));
    echo "<br>";
    ?>


            2.array_splice()
            3.array_combine(array1,array2)通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值。如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false。
                array1    必需。规定键名。
                array2      必需。规定值
                注意:两个参数必须有相同数目的元素。

    <?php
    $a=array(1,2,3,4);
    $b=array("a","b","c","d");
    
    echo "<pre>";
    print_r(array_combine($a,$b));
    echo "<pre>";
    ?>


            4.array_merge(array1,array2,array3...)把一个或多个数组合并为一个数组。
                            如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。

    <?php
    $a1=array("a"=>"Horse","b"=>"Dog");
    $a2=array("c"=>"Cow","b"=>"Cat");
    print_r(array_merge($a1,$a2));
    ?>


            5.array_intersect(array1,array2,array3...)计算数组的交集。结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变。

    <?php
    $a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
    $a2=array(3=>"Horse",4=>"Dog",5=>"Fish");
    print_r(array_intersect($a1,$a2));
    ?>


            6.array_diff(array1,array2,array3...)返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。
                注意:都是与第一个数组进行比较

    <?php
    $a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
    $a2=array(3=>"Horse",4=>"Dog",5=>"Fish");
    print_r(array_diff($a1,$a2));
    ?>


       六.数组与数据结构的函数
            1.使用数组实现堆栈
                (1).array_push(array,value1,value2...)将一个或多个单元(元素)压入数组的末尾(入栈),然后返回新数组的长度。
                    注释:即使数组中有字符串键名,您添加的元素也始终是数字键。(参见例子 2)
                    注释:如果用 array_push() 来给数组增加一个单元,还不如用 $array[] =,因为这样没有调用函数的额外负担。
                    注释:如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。
                (2).array_pop(array)将数组最后一个单元弹出(出栈)。函数删除数组中的最后一个元素。返回弹出的值

    <?php
    $a=array(0=>"Cat",1=>"Dog",2=>"Horse");
    
    array_push($a,"one","two");
    print_r($a);
    echo "<br>";
    
    $value=array_pop($a);
    echo $value."<br>";
    print_r($a);
    echo "<br>";
    ?>


            2.使用队列
                (1).array_unshift(array,value1,value2,value3...) 函数在数组开头插入一个或多个元素。被加上的元素作为一个整体添加,这些元素在数组中的顺序和在参数中的顺序一样。该函数会返回数组中元素的个数。
                    注释:所有的数值键名将修改为从零开始重新计数,所有的字符串键名保持不变
                (2).array_shift(array)函数删除数组中的第一个元素,并返回被删除元素的值。
                    注释:如果键是数字的,所有元素都将获得新的键,从 0 开始,并以 1 递增

    <?php
    $a=array("a","b","c","d");
    
    //在数组头加入数据
    array_unshift($a,"one","two");
    print_r($a);
    echo "<br>";
    
    //删除数组头的数据
    $value=array_shift($a);
    echo $value."<br>";
    print_r($a);
    echo "<br>";
    
    //从数组的任一一个地方删除数据
    unset($a[1]);
    print_r($a);
    ?>


        七.其他与数据操作有关的函数
            1.array_rand(array,number)从数组中随机选出一个或多个元素,并返回。
                number   可选。默认是 1。规定返回多少个随机的元素。
            2.shuffle(array)把数组中的元素按随机顺序重新排列。
                注释:本函数为数组中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
            3.array_sum(array)计算数组中所有值的和。将字符串转化成数字

    <?php
    $a=array(1,3,58,69,75,18,59,423);
    
    print_r($a);
    echo "<br>";
    
    echo $a[array_rand($a)]."<br>";
    
    shuffle($a);
    print_r($a);
    echo "<br>";
    
    echo "sum=".array_sum($a);
    ?>


            4.range(first,second,step)建立一个包含指定范围的元素的数组。
                first       必需。规定数组元素的最小值。
                second      必需。规定数组元素的最大值。
                step        可选。规定元素之间的步进制。默认是 1。

    <?php
    $arr=range(0,50,10);
    
    print_r($arr);
    echo "<br>";
    
    $arr1=range("a","k");
    
    print_r($arr1);
    ?>
  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/Y-HKL/p/5323299.html
Copyright © 2011-2022 走看看