PHP array_map() 处理数组的单元数据问题
2012-11-08 15:26
726 查看
今天在使用array_map 时候遇到需要调用 类的静态方法,没想到参数该如何传递,大家的智慧是无穷的,幸而找到如下一片博文,mark下;原文见:
http://blog.zol.com.cn/3917/article_3916396.html
在PHP编程中,我们经常会遇到处理数组的单元数据问题,比如对数组中每个单元应用自定义函数。
一种方法是通过循环遍历整个数组,对每个单元调用自定义函数,然后用返回值替换原数组相应单元的值。这也是最常见和简单的方法,在此就不举例了。
一种方法是通过PHP提供的array_map函数回调自定义函数,这也是被推荐的方法。
array_map --
将回调函数作用到给定数组的单元上
说明:
array array_map ( callback callback, array arr1 [, array ...] )
array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给
array_map() 函数的数组数目一致。
摘录一段PHP手册的列子简要说明如下:
那么,如果你是在一个PHP类中通过array_map函数回调内部方法又该如何做呢?
同样,我们可以在PHP手册中找到一段用户添加的说明:
感谢作者的分享,因为PHP手册中对array_map函数的参数说明确实太过简单,以至于连基本的对象方法引用都没提及。
现在进入我们讨论的主题:如果在PHP类中通过array_map函数回调内部方法要如何做呢?
先看一下代码(PS:由于文章长度限制,我只好去掉注释。。。):
这里有几点可以参考的:
1,在PHP类中通过array_map函数回调内部方法时,类名称可以使用__CLASS__常量。我们强烈推荐使用此常量,因为不论你类如何修改,这能保证最终结果都是正确的。
2,如果回调的方法是非静态类型,亦可通过$this伪变量指定。
3,在PHP类中的array_map函数总是不能识别self伪变量。
http://blog.zol.com.cn/3917/article_3916396.html
在PHP编程中,我们经常会遇到处理数组的单元数据问题,比如对数组中每个单元应用自定义函数。
一种方法是通过循环遍历整个数组,对每个单元调用自定义函数,然后用返回值替换原数组相应单元的值。这也是最常见和简单的方法,在此就不举例了。
一种方法是通过PHP提供的array_map函数回调自定义函数,这也是被推荐的方法。
array_map --
将回调函数作用到给定数组的单元上
说明:
array array_map ( callback callback, array arr1 [, array ...] )
array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给
array_map() 函数的数组数目一致。
摘录一段PHP手册的列子简要说明如下:
function cube($n){ return $n * $n * $n; } $a = array(1, 2, 3, 4, 5); $b =array_map("cube", $a); print_r($b); ?>
那么,如果你是在一个PHP类中通过array_map函数回调内部方法又该如何做呢?
同样,我们可以在PHP手册中找到一段用户添加的说明:
If you need to call a static method from array_map, this will NOT work: (如果你想在array_map函数中回调一个静态方法,那么下面的做法是错误的)
$a = array(1, 2, 3, 4, 5);
$b =
array_map("myclass::myMethoed", $a); print_r($b); ?>
Instead, you need to do this: (你应该做如下调用)
$a = array(1, 2, 3, 4, 5);
$b =
array_map(
array
(
"myclass","myMethoed"
)
, $a); print_r($b); ?>
感谢作者的分享,因为PHP手册中对array_map函数的参数说明确实太过简单,以至于连基本的对象方法引用都没提及。
现在进入我们讨论的主题:如果在PHP类中通过array_map函数回调内部方法要如何做呢?
先看一下代码(PS:由于文章长度限制,我只好去掉注释。。。):
class Test{ public function __construct(){} public function common_filter($arg){ return $this->entities($arg); } public function public_static_filter($arg){ return self::_entities($arg); } public function private_static_filter($arg){ return self::__entities($arg); } public function entities($arg){ $return = null; if(is_array($arg)){ $return = array_map(array($this, 'entities'), $arg); }else{ $return = is_numeric($arg) ? $arg : htmlspecialchars($arg, ENT_QUOTES); } return $return; } public static function _entities($arg){ $return = null; if(is_array($arg)){ $return = array_map(array(__CLASS__, '_entities'), $arg); }else{ $return = is_numeric($arg) ? $arg : htmlspecialchars($arg, ENT_QUOTES); } return $return; } private static function __entities($arg){ $return = null; if(is_array($arg)){ $return = array_map(array(__CLASS__, '__entities'), $arg); }else{ $return = is_numeric($arg) ? $arg : htmlspecialchars($arg, ENT_QUOTES); } return $return; } } $args = array( 'name' => 'Mc\'Spring', 'age' => 25, 'email' => 'abc@gmail.com', 'address' => 'Simple Test' ); print_r(Test::_entities($args)); echo ' '; $obj = new Test; print_r($obj->entities($args)); echo ' '; print_r($obj->common_filter($args)); echo ' '; print_r($obj->public_static_filter($args)); echo ' '; print_r($obj->private_static_filter($args));
?>
这里有几点可以参考的:
1,在PHP类中通过array_map函数回调内部方法时,类名称可以使用__CLASS__常量。我们强烈推荐使用此常量,因为不论你类如何修改,这能保证最终结果都是正确的。
2,如果回调的方法是非静态类型,亦可通过$this伪变量指定。
3,在PHP类中的array_map函数总是不能识别self伪变量。
相关文章推荐
- php 数组值处理 array_map 的使用
- PHP的array_diff()函数在处理大数组时的效率问题
- PHP学习笔记——使用回调函数处理数组函数array_map()
- php-Arrays 函数-array_map-将回调函数作用到给定数组的单元上
- PHP数组处理函数的使用array_map(三)
- 项目五 用类处理数组作数据成员问题
- mina自定义编解码器接收处理byte数组(同时解决数据传输中的粘包、缺包问题)
- 关于php中from提交checkbox数组数据未选中的不提交的问题
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- php-Arrays 函数-array_filter-用回调函数过滤数组中的单元
- PHP数组函数: array_walk()与 array_map() 的区别
- PHP数组函数: array_walk()与 array_map() 的区别
- 关于处理PHP json_encode返回的json数据一些小问题
- PHP处理大量数据不超出内存限制的问题
- php将print_r处理后的数据还原为原始数组的解决方法
- 国内某一线服装品牌运输单信息接口数据组装(PHP数组处理记录)
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- array_multisort 对关联数组进行排序的问题 PHP
- js 处理 php 的数组数据