ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2729|回复: 2

[细说PHP] 第9章PHP中的数组与数据结构--数组的相关处理函数(二)

[复制链接]
发表于 2013-8-5 14:58:34 | 显示全部楼层 |阅读模式
函数array_filter():用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组。

<?php
        /**
                自定义函数myFun,为数组过滤设置条件
                @param        int        $var         数组中的一个元素值
                @return        bool                        如果参数能被2整除则返回真
        */
        function myFun($var){                                                      
                if( $var % 2 == 0 )
                        return true;
        }

        //声明值为整数序列的数组
        $array = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);         

        //使用函数array_filter()将自定义的函数名以字符串的形式传给第二个参数
        print_r(array_filter($array, "myFun"));        

        /* 过滤后的结果输出Array ( [b] => 2 [d] => 4 )  */


回复

使用道具 举报

 楼主| 发表于 2013-8-5 15:01:06 | 显示全部楼层
函数array_walk():对数组中的每个元素应用回调函数处理。

<?php
        /**
                定义一个可以作为回调的函数,名称为myfun1
                @param        string        $value        一个字符串参数,接收数组的值
                @param        string        $key                一个字符串参数,接收数组的键
        */
        function myfun1( $value, $key ) {                                          
                echo "The key $key has the value $value<br>";
        }

        //定义一个数组$lamp
        $lamp = array( "a"=>"Linux", "b"=>"Apache", "c"=>"Mysql", "d"=>"PHP" );

        //使用array_walk函数传入一个数组和一个回调函数
        array_walk( $lamp, "myfun1" );                       
       
        /*  执行后输出如下结果:
            The key a has the value Linux
            The key b has the value Apache
            The key c has the value MySQL
            The key d has the value PHP
        */

        /**
                定义一个可以作为回调的函数,名称为myfun2
                @param        string        $value        一个字符串参数,接收数组的值
                @param        string        $key                一个字符串参数,接收数组的键
                @param        string        $p                一个字符串参数,接收一个自定义的连接符号字符串
        */
        function myfun2( $value, $key, $p)  {                 
                echo "$key $p $value <br>";            
        }
       
        //使用array_walk函数传入三个参数
        array_walk( $lamp, "myfun2", "has the value" );          

        /* 执行后输出如下结果:
                a has the value Linux
                b has the value Apache
                c has the value MySQL
                d has the value PHP     
        */
       
        /**
                定义一个可以作为回调的函数,名称为myfun3,改变数组元素的值
                @param        string        $value        一个引用参数,接收数组变量,请注意&$value传入引用
                @param        string        $key                一个字符串参数,接收数组的键
        */
        function myfun3( &$value, $key ) {                     
                $value = "Web";       //将改变原数组中每个元素的值
        }

        //使用array_walk函数传入两个参数,其中第一个参数为引用
        array_walk( $lamp,"myfun3" );                                  
       
        print_r( $lamp );          //输出:Array ( [a] => Web [b] => Web [c] => Web [d] => Web )


回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:10:27 | 显示全部楼层
函数array_map():与array_walk()函数相比,可以处理多个数组,将回调函数作用到给定数组的元素上,返回用户自定义函数作用后的数组。

<?php
        /**
                自定义一个函数作为回调的函数,函数名称为myfun1
                @param        string        $v        接收数组中每个元素作为参数
                @return        string                返回一个字符串类型的值
        */
        function myfun1($v) {                                      
                if ($v === "MySQL") {                                   //如果数组中元素的值恒等于MySQL条件成功
                        return "Oracle";                                    //返回Oracle
                }
                return $v;                                                     //不等于MySQL的元素都返回传入的值,即原型返回
        }

        //声明一个有4个元素的数组$lamp
        $lamp = array( "Linux", "Apache", "MySQL", "PHP" );               
       
        //使用array_map()函数传入一个函数名和一个数组参数
        print_r( array_map( "myfun1", $lamp ) );                  
       
        /*上面程序执行后输出Array ( [0] => Linux [1] => Apache [2] => Oracle [3] => PHP ) */
       
        /**
                声明一个函数使用多个参数, 回调函数接受的参数数目应该和传递给array_map()函数的数组数目一致
                自定义一个函数需要两个参数,两个数组中的元素依次传入
                @param        mixed        $v1        数组中前一个元素的值
                @param        mixed        $v2        数组中下一个元素的值
                @return        string                提示字符串
        */
        function myfun2( $v1, $v2 ) {                            
                if ($v1 === $v2) {                                  //如果两个数组中的元素值相同则条件成功
                        return "same";                                        //返回same, 说明两个数组中对应的元素值相同
                }
                return "different";                                 //如果两个数组中对应的元素值不同,返回different
        }
       
        $a1 = array("Linux", "PHP", "MySQL");           //声明数组$a1,有三个元素
        $a2 = array("Unix", "PHP", "Oracle");             //数组$a第二个元素值和$a中第二个元素的值相同
       
        print_r( array_map( "myfun2", $a1, $a2) );  //使用array_map()函数传入多个数组
       
        /*上面程序执行后输出:Array ( [0] => different [1] => same [2] => different ) */
       
        //当自定义函数名设置为 null 时的情况
        $a1 = array("Linux", "Apache");                 //声明一个数组$a1, 有两个元素
        $a2 = array("MySQL", "PHP");                         //声明另一个数组$a2,也有两个元素

        print_r( array_map( null, $a1, $a2) );      //通过第一个参数设置为NULL,构造一个数组的数组

        /*   上面程序执行后输出:Array (
                [0] => Array ( [0] => Linux [1] => MySQL )
                [1] => Array ( [0] => Apache [1] => PHP ) )
        */


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-19 00:48 , Processed in 0.035401 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表