Android程序员学PHP开发(24)-数组操作相关函数(2)回调函数篇-PhpStorm

来源:互联网 发布:linux下移动文件夹 编辑:程序博客网 时间:2024/05/14 03:07
转载请注明出处:http://blog.csdn.net/iwanghang/
觉得博文有用,请点赞,请评论,请关注,谢谢!~

本篇博文主要是 使用回调函数处理数组,2种方式:

函数调用,函数结构一目了然

匿名函数 ,即时使用,安全性高


下面演示几个函数的使用:主要是了解回调函数的使用:

count() 计算数组中的单元数目或对象中的属性个数

array_count_values() 统计数组中所有的值出现的次数

array_unique() 移除数组中重复的值

array_filter() 用回调函数过滤数组中的单元

array_walk() 使用用户自定义函数对数组中的每个元素做回调处理

array_map() 为数组的每个元素应用回调函数

通过array_filter()和array_walk()重点了解一下回调函数的使用,尤其是安全性较高的匿名函数


<?php    /**     * 数组的相关处理函数:     * http://php.net/manual/zh/ref.array.php     *     * 下面演示几个函数的使用:主要是了解回调函数的使用     * count() 计算数组中的单元数目或对象中的属性个数     * array_count_values() 统计数组中所有的值出现的次数     * array_unique() 移除数组中重复的值     * array_filter() 用回调函数过滤数组中的单元     * array_walk() 使用用户自定义函数对数组中的每个元素做回调处理     * array_map() 为数组的每个元素应用回调函数     * 通过array_filter()和array_walk()重点了解一下回调函数的使用,尤其是安全性较高的匿名函数     */    $lamp = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP");    echo '---------- print_r() ----------<br>';    print_r($lamp); // 打印结果:Array ( [os] => Linux [webserver] => Apache [db] => MySQL [language] => PHP )    echo '<br>';    /**     * count() 计算数组中的单元数目或对象中的属性个数     */    echo '---------- count() 字符串 ----------<br>';    $str = "hello world";    $str2 = "";    var_dump(count($str)); // 打印结果:int(1)    echo '<br>';    var_dump(count($str2)); // 打印结果:int(1)    echo '<br>';    echo '---------- count() 数组 ----------<br>';    echo count($lamp); // 打印结果:4    echo '<br>';    echo '---------- count() 多维数组 ----------<br>';    $web = array(            "lamp"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP"),            "lamp2"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP"),            "lamp3"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP")        );    echo count($web); // 打印结果:3    echo '<br>';    echo count($web,1); // 打印结果:15 , 数组有3个元素,子数组有12个元素    echo '<br>';    /**     * array_count_values() 统计数组中所有的值出现的次数     */    echo '---------- array_count_values() ----------<br>';    $lamp4 = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "db2"=>"MySQL", "language"=>"PHP");    echo print_r(array_count_values($lamp4)); // 打印结果:Array ( [Linux] => 1 [Apache] => 1 [MySQL] => 2 [PHP] => 1 ) 1    echo '<br>';    /**     * array_unique() 移除数组中重复的值     * 第一次出现的value保留其key,其他的移除     */    echo '---------- array_unique() ----------<br>';    $lamp5 = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "db2"=>"MySQL", "language"=>"PHP");    echo print_r(array_unique($lamp5)); // 打印结果:Array ( [os] => Linux [webserver] => Apache [db] => MySQL [language] => PHP ) 1    echo '<br>';    /**     * array_filter() 用回调函数过滤数组中的单元     */    echo '---------- array_filter() ----------<br>';    $arr = array(1,2,false,-3,null,-2,3,4,"",5,-5,-4,-1);    echo '<pre>';    var_dump($arr);    /*打印结果:            array(13) {              [0]=>              int(1)              [1]=>              int(2)              [2]=>              bool(false)              [3]=>              int(-3)              [4]=>              NULL              [5]=>              int(-2)              [6]=>              int(3)              [7]=>              int(4)              [8]=>              string(0) ""              [9]=>              int(5)              [10]=>              int(-5)              [11]=>              int(-4)              [12]=>              int(-1)            }    */    echo '---------- array_filter() 不传参调用----------<br>';    var_dump(array_filter($arr));    /*打印结果:结果中,false、null、"",被过滤掉了            array(10) {              [0]=>              int(1)              [1]=>              int(2)              [3]=>              int(-3)              [5]=>              int(-2)              [6]=>              int(3)              [7]=>              int(4)              [9]=>              int(5)              [10]=>              int(-5)              [11]=>              int(-4)              [12]=>              int(-1)            }      */    echo '---------- array_filter() 通过自定义函数过滤 ----------<br>';    function myfun($value){ // 自己写的函数,大于等于0返回真,否则返回假        if ($value>=0){            return true;        }else{            return false;        }    }    var_dump(array_filter($arr,"myfun"));    /*打印结果:结果中,小于0的,被过滤掉了            array(8) {              [0]=>              int(1)              [1]=>              int(2)              [2]=>              bool(false)              [4]=>              NULL              [6]=>              int(3)              [7]=>              int(4)              [8]=>              string(0) ""              [9]=>              int(5)            }    */    echo '---------- array_filter() 通过匿名函数过滤 ----------<br>';    echo '---------- 当其他地方不需要调用这个函数,推荐使用匿名函数,方便且安全 ----------<br>';    var_dump(array_filter($arr, function ($value){        return !($value%2==0);    }));    /*打印结果:结果中,2的倍数,被过滤掉了            array(6) {              [0]=>              int(1)              [3]=>              int(-3)              [6]=>              int(3)              [9]=>              int(5)              [10]=>              int(-5)              [12]=>              int(-1)            }    */    /**     * array_walk() 使用用户自定义函数对数组中的每个元素做回调处理     */    echo '---------- array_walk() ----------<br>';    $arr2 = array(1,2,3,4,5);    print_r($arr2);    echo '<br>';    /*打印结果:数组原型打印            Array            (                [0] => 1                [1] => 2                [2] => 3                [3] => 4                [4] => 5            )    */    echo '---------- array_walk() 没有引用 $value 调用函数 ----------<br>';    function myfun2($value){ // 没有引用 $value        $value=$value*$value;    }    array_walk($arr2,"myfun2"); // 没有引用 $value    print_r($arr2);    echo '<br>';    /*打印结果:            Array            (                [0] => 1                [1] => 2                [2] => 3                [3] => 4                [4] => 5            )    */    echo '---------- array_walk() 有引用 &$value 调用函数 ----------<br>';    function myfun3(&$value){ // 引用 &$value        $value=$value*$value;    }    array_walk($arr2,"myfun3"); // 引用 &$value    print_r($arr2);    echo '<br>';    /*打印结果:            Array            (                [0] => 1                [1] => 4                [2] => 9                [3] => 16                [4] => 25            )    */    echo '---------- array_walk() 同时处理key和value ----------<br>';    $arr3 = array("one"=>1, "two"=>2, "three"=>3, "four"=>4, "five"=>5);    print_r($arr3);    echo '<br>';    /*打印结果:数组原型打印            Array            (                [one] => 1                [two] => 2                [three] => 3                [four] => 4                [five] => 5            )    */    echo '---------- array_walk() 调用函数有2个参数 即,同时对key和value操作 ----------<br>';    function myfun4(&$value,$key){        $value=$value*$value;        echo $key."~~~~~".$value."<br>";    }    array_walk($arr3,"myfun4");    /*打印结果:            one~~~~~1            two~~~~~4            three~~~~~9            four~~~~~16            five~~~~~25    */    echo '---------- array_walk() 调用函数有2个参数 即,同时对key和value操作 匿名函数----------<br>';    array_walk($arr3,function ($value, $key){        echo $key."~~~~~".$value."<br>";    });    /*打印结果:            one~~~~~1            two~~~~~4            three~~~~~9            four~~~~~16            five~~~~~25    */    /**     * array_map() 为数组的每个元素应用回调函数     */    echo '---------- array_map() ----------<br>';    $arr4 = array(1,2,3,4,5);    $arr5 = array(6,7,8,9,0);    print_r($arr4);    echo '<br>';    /*打印结果:数组原型打印            Array            (                [0] => 1                [1] => 2                [2] => 3                [3] => 4                [4] => 5            )    */    echo '---------- array_map() 1 ----------<br>';    function myfun5($value){        return $value*$value*$value;    }    $arr4new = array_map("myfun5", $arr4);    print_r($arr4new);    echo '<br>';    /*打印结果:            Array            (                [0] => 1                [1] => 8                [2] => 27                [3] => 64                [4] => 125            )    */    echo '---------- array_map() 2 注意return ----------<br>';    function myfun6($value){        echo $value*$value*$value."<br>";    }    $arr4new = array_map("myfun6", $arr4);    print_r($arr4new);    echo '<br>';    /*打印结果:数组里的value没了,因为在函数里没有return,所以,使用array_map()注意return            1            8            27            64            125            Array            (                [0] =>                [1] =>                [2] =>                [3] =>                [4] =>            )    */    echo '---------- array_map() 3 ----------<br>';    function myfun7($value, $value2){        echo "$value~~~~~$value2<br>";        return 1;    }    $arr45new = array_map("myfun7", $arr4,$arr5);    print_r($arr45new);    echo '<br>';    /*打印结果:            1~~~~~6            2~~~~~7            3~~~~~8            4~~~~~9            5~~~~~0            Array            (                [0] => 1                [1] => 1                [2] => 1                [3] => 1                [4] => 1            )    */    echo '---------- array_map() 4 ----------<br>';    $arr45new = array_map(null, $arr4,$arr5);    print_r($arr45new);    echo '<br>';    /*打印结果:            Array            (                [0] => Array                    (                        [0] => 1                        [1] => 6                    )                [1] => Array                    (                        [0] => 2                        [1] => 7                    )                [2] => Array                    (                        [0] => 3                        [1] => 8                    )                [3] => Array                    (                        [0] => 4                        [1] => 9                    )                [4] => Array                    (                        [0] => 5                        [1] => 0                    )            )    */    echo '---------- array_map() 5 ----------<br>';    $arr6 = array(1,2,3,4,5);    $arr7 = array("one","two","three");    $arr8 = array("aa","bb","cc","dd");    $arr678new = array_map(null,$arr6,$arr7,$arr8);    print_r($arr678new);    echo '<br>';    /*打印结果:            Array            (                [0] => Array                    (                        [0] => 1                        [1] => one                        [2] => aa                    )                [1] => Array                    (                        [0] => 2                        [1] => two                        [2] => bb                    )                [2] => Array                    (                        [0] => 3                        [1] => three                        [2] => cc                    )                [3] => Array                    (                        [0] => 4                        [1] =>                        [2] => dd                    )                [4] => Array                    (                        [0] => 5                        [1] =>                        [2] =>                    )            )    */



转载请注明出处:http://blog.csdn.net/iwanghang/



欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式

微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com



1 0
原创粉丝点击