>  기사  >  백엔드 개발  >  안드로이드 프로그래머가 배우는 PHP 개발 (24) - 배열 연산 관련 함수 (2) 콜백 함수 - PhpStorm

안드로이드 프로그래머가 배우는 PHP 개발 (24) - 배열 연산 관련 함수 (2) 콜백 함수 - PhpStorm

黄舟
黄舟원래의
2017-03-03 09:48:05885검색

이 기사에서는 주로 콜백 함수를 사용하여 배열을 처리합니다. 2가지 방법:

함수 호출, 함수 구조가 한눈에 명확함

익명 함수, 즉시 사용, 높은 보안

다음은 여러 함수의 사용을 보여줍니다. 주로 콜백 함수의 사용을 이해하기 위해:

count () 배열의 셀 수 또는 객체의 속성 수를 계산합니다.

array_count_values() 배열에 있는 모든 값의 발생 횟수를 계산합니다. 배열

array_unique()는 배열에서 중복된 값을 제거합니다

array_filter()는 콜백 함수를 사용하여 배열의 셀을 필터링합니다.

array_walk()는 사용자 정의 함수를 사용하여 배열의 각 요소에 대해 콜백 처리를 수행합니다.

array_map()은 콜백 함수를 배열에 적용합니다. 배열의 각 요소

array_filter() 및 array_walk()를 통해 콜백 함수의 사용 이해에 중점을 두고, 특히 보다 안전한 익명 함수

<?php
    /**
     * 数组的相关处理函数:
     * http://www.php.cn/
     *
     * 下面演示几个函数的使用:主要是了解回调函数的使用
     * 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 &#39;---------- print_r() ----------<br>&#39;;
    print_r($lamp); // 打印结果:Array ( [os] => Linux [webserver] => Apache [db] => MySQL [language] => PHP )
    echo &#39;<br>&#39;;

    /**
     * count() 计算数组中的单元数目或对象中的属性个数
     */
    echo &#39;---------- count() 字符串 ----------<br>&#39;;
    $str = "hello world";
    $str2 = "";
    var_dump(count($str)); // 打印结果:int(1)
    echo &#39;<br>&#39;;
    var_dump(count($str2)); // 打印结果:int(1)
    echo &#39;<br>&#39;;

    echo &#39;---------- count() 数组 ----------<br>&#39;;
    echo count($lamp); // 打印结果:4
    echo &#39;<br>&#39;;

    echo &#39;---------- count() 多维数组 ----------<br>&#39;;
    $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 &#39;<br>&#39;;
    echo count($web,1); // 打印结果:15 , 数组有3个元素,子数组有12个元素
    echo &#39;<br>&#39;;

    /**
     * array_count_values() 统计数组中所有的值出现的次数
     */
    echo &#39;---------- array_count_values() ----------<br>&#39;;
    $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 &#39;<br>&#39;;

    /**
     * array_unique() 移除数组中重复的值
     * 第一次出现的value保留其key,其他的移除
     */
    echo &#39;---------- array_unique() ----------<br>&#39;;
    $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 &#39;<br>&#39;;

    /**
     * array_filter() 用回调函数过滤数组中的单元
     */
    echo &#39;---------- array_filter() ----------<br>&#39;;
    $arr = array(1,2,false,-3,null,-2,3,4,"",5,-5,-4,-1);
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    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 &#39;---------- array_filter() 不传参调用----------<br>&#39;;
    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 &#39;---------- array_filter() 通过自定义函数过滤 ----------<br>&#39;;
    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 &#39;---------- array_filter() 通过匿名函数过滤 ----------<br>&#39;;
    echo &#39;---------- 当其他地方不需要调用这个函数,推荐使用匿名函数,方便且安全 ----------<br>&#39;;
    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 &#39;---------- array_walk() ----------<br>&#39;;
    $arr2 = array(1,2,3,4,5);
    print_r($arr2);
    echo &#39;<br>&#39;;
    /*打印结果:数组原型打印
            Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => 4
                [4] => 5
            )
    */

    echo &#39;---------- array_walk() 没有引用 $value 调用函数 ----------<br>&#39;;
    function myfun2($value){ // 没有引用 $value
        $value=$value*$value;
    }
    array_walk($arr2,"myfun2"); // 没有引用 $value
    print_r($arr2);
    echo &#39;<br>&#39;;
    /*打印结果:
            Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => 4
                [4] => 5
            )
    */

    echo &#39;---------- array_walk() 有引用 &$value 调用函数 ----------<br>&#39;;
    function myfun3(&$value){ // 引用 &$value
        $value=$value*$value;
    }
    array_walk($arr2,"myfun3"); // 引用 &$value
    print_r($arr2);
    echo &#39;<br>&#39;;
    /*打印结果:
            Array
            (
                [0] => 1
                [1] => 4
                [2] => 9
                [3] => 16
                [4] => 25
            )
    */

    echo &#39;---------- array_walk() 同时处理key和value ----------<br>&#39;;
    $arr3 = array("one"=>1, "two"=>2, "three"=>3, "four"=>4, "five"=>5);
    print_r($arr3);
    echo &#39;<br>&#39;;
    /*打印结果:数组原型打印
            Array
            (
                [one] => 1
                [two] => 2
                [three] => 3
                [four] => 4
                [five] => 5
            )
    */

    echo &#39;---------- array_walk() 调用函数有2个参数 即,同时对key和value操作 ----------<br>&#39;;
    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 &#39;---------- array_walk() 调用函数有2个参数 即,同时对key和value操作 匿名函数----------<br>&#39;;
    array_walk($arr3,function ($value, $key){
        echo $key."~~~~~".$value."<br>";
    });
    /*打印结果:
            one~~~~~1
            two~~~~~4
            three~~~~~9
            four~~~~~16
            five~~~~~25
    */

    /**
     * array_map() 为数组的每个元素应用回调函数
     */
    echo &#39;---------- array_map() ----------<br>&#39;;
    $arr4 = array(1,2,3,4,5);
    $arr5 = array(6,7,8,9,0);
    print_r($arr4);
    echo &#39;<br>&#39;;
    /*打印结果:数组原型打印
            Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => 4
                [4] => 5
            )
    */

    echo &#39;---------- array_map() 1 ----------<br>&#39;;
    function myfun5($value){
        return $value*$value*$value;
    }
    $arr4new = array_map("myfun5", $arr4);
    print_r($arr4new);
    echo &#39;<br>&#39;;
    /*打印结果:
            Array
            (
                [0] => 1
                [1] => 8
                [2] => 27
                [3] => 64
                [4] => 125
            )
    */

    echo &#39;---------- array_map() 2 注意return ----------<br>&#39;;
    function myfun6($value){
        echo $value*$value*$value."<br>";
    }
    $arr4new = array_map("myfun6", $arr4);
    print_r($arr4new);
    echo &#39;<br>&#39;;
    /*打印结果:数组里的value没了,因为在函数里没有return,所以,使用array_map()注意return
            1
            8
            27
            64
            125
            Array
            (
                [0] =>
                [1] =>
                [2] =>
                [3] =>
                [4] =>
            )
    */

    echo &#39;---------- array_map() 3 ----------<br>&#39;;
    function myfun7($value, $value2){
        echo "$value~~~~~$value2<br>";
        return 1;
    }
    $arr45new = array_map("myfun7", $arr4,$arr5);
    print_r($arr45new);
    echo &#39;<br>&#39;;
    /*打印结果:
            1~~~~~6
            2~~~~~7
            3~~~~~8
            4~~~~~9
            5~~~~~0
            Array
            (
                [0] => 1
                [1] => 1
                [2] => 1
                [3] => 1
                [4] => 1
            )
    */

    echo &#39;---------- array_map() 4 ----------<br>&#39;;
    $arr45new = array_map(null, $arr4,$arr5);
    print_r($arr45new);
    echo &#39;<br>&#39;;
    /*打印结果:
            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 &#39;---------- array_map() 5 ----------<br>&#39;;
    $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 &#39;<br>&#39;;
    /*打印结果:
            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] =>
                    )

            )
    */

위는 안드로이드 프로그래머가 PHP 개발을 배우는 방법입니다. (24) - 배열 연산 관련 기능 (2) 콜백 기능 - PhpStorm 콘텐츠, 더 많은 관련 콘텐츠는 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.