array_map()关于回调函数的总结

array_map()关于回调函数的总结

array_map()函数的第一个参数可以是匿名函数,系统函数,也可以是自己自定义的函!在全局空间下,这些函数的调用都很简单 在这里就不多说了!我们主要讨论的是该函数调用类中的方法和静态方法的区别

摘录一段php手册的例子简要的说明一下:

1 <?php
2 function cube($n){
3      return $n * $n * $n;
4 }
5 
6 $a = array(1, 2, 3, 4, 5);
7 $b = array_map("cube", $a);
8 print_r($b);
9 ?> 

那么,如果你在一个php类中通过array_map()函数回调内部的方法又该如何做呢

同样的 我们在php手册中找到一段用户添加的说明:

If you need to call a static method from array_map, this will NOT work:
(如果你想在array_map函数中回调一个静态方法,那么下面的做法是错误的)

1 <?php
2 $a = array(1, 2, 3, 4, 5);
3 $b = array_map("myclass::myMethoed", $a);
4 print_r($b);
5 ?> 

Instead, you need to do this:
(你应该做如下调用)

1 <?php
2 $a = array(1, 2, 3, 4, 5);
3 $b = array_map(array("myclass","myMethoed"), $a);
4 print_r($b);
5 ?> 

例如

 1  class abc{
 2 
 3   public function abc1(){
 4 
 5   //code....
 6 
 7 }
 8 public  function abc2(){
 9    $a=array(1,2,3,4,5);
10   array_map(array($this,'abc1'),$a);
11 
12 }
13 
14 
15

上文中的$this可以用__CLASS__类的魔术常量代替  我们强烈推荐使用此常量  因为不论你的类如何的修改 都能最终保证结果是正确的

如果是在类的外部调用类的方法呢??

这里分为两种情况:

1.如果在类的外部调用的是类的静态方法:

可以这样的用:

 1 <?php
 2 class cube{
 3 
 4     public static  function cube1($n){
 5 
 6         return $n*$n;
 7 
 8     }
 9 
10 }
11 $a=array(1,2,3,4,5);
12 var_dump(array_map(array('cube','cube1'),$a));

输出的结果为:array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) }

我们把static 关键字去掉 会出现什么样的结果呢??

class cube{

    public   function cube1($n){

        return $n*$n;

    }

}
$a=array(1,2,3,4,5);
var_dump(array_map(array('cube','cube1'),$a));

会被曝这样的错误:Deprecated: array_map() expects parameter 1 to be a valid callback, non-static method cube::cube1() should not be called statically in E:\fsh\ceshi2.php on line 12
array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) }

由此可知:在类的外面array_map()只能调用静态的方法,那么能不能调用非静态的方法呢  答案是肯定的

 1 <?php
 2 class cube{
 3 
 4     public   function cube1($n){
 5 
 6         return $n*$n;
 7 
 8     }
 9 
10 }
11 $a=array(1,2,3,4,5);
12 var_dump(array_map(array(new cube,'cube1'),$a));
返回的结果:array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) }

 tip:以上内容是自己的理解,欢迎大家留言补充!!!

posted @ 2017-09-19 13:25 xsatc 阅读( ...) 评论( ...) 编辑 收藏
以下是对于在PHP中的一些数组函数的作用和简单用法举例: 1. array_merge(): 将一个或多个数组合并为一个数组。 ```php $array1 = array('red', 'green'); $array2 = array('blue', 'yellow'); $result = array_merge($array1, $array2); print_r($result); // 输出:Array ( [0] => red [1] => green [2] => blue [3] => yellow ) ``` 2. array_flip(): 交换数组中的键和值。 ```php $array = array('a' => 1, 'b' => 2, 'c' => 3); $result = array_flip($array); print_r($result); // 输出:Array ( [1] => a [2] => b [3] => c ) ``` 3. array_combine(): 创建一个新数组,使用一个数组的值作为键名,另一个数组的值作为键值。 ```php $keys = array('a', 'b', 'c'); $values = array(1, 2, 3); $result = array_combine($keys, $values); print_r($result); // 输出:Array ( [a] => 1 [b] => 2 [c] => 3 ) ``` 4. array_chunk(): 将一个数组分割成多个数组,每个数组包含指定数量的元素。 ```php $array = array('a', 'b', 'c', 'd', 'e'); $result = array_chunk($array, 2); print_r($result); // 输出:Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) [2] => Array ( [0] => e ) ) ``` 5. array_fill(): 用给定的值填充数组。 ```php $result = array_fill(0, 3, 'apple'); print_r($result); // 输出:Array ( [0] => apple [1] => apple [2] => apple ) ``` 6. array_replace(): 使用后面数组的值替换第一个数组的值。 ```php $array1 = array('a' => 1, 'b' => 2); $array2 = array('b' => 3, 'c' => 4); $result = array_replace($array1, $array2); print_r($result); // 输出:Array ( [a] => 1 [b] => 3 [c] => 4 ) ``` 7. array_map(): 将回调函数作用到给定数组的每个元素上,并返回一个新的数组。 ```php $array = array(1, 2, 3); $result = array_map(function($value) { return $value * 2; }, $array); print_r($result); // 输出:Array ( [0] => 2 [1] => 4 [2] => 6 ) ``` 8. array_walk(): 对数组中的每个元素应用用户自定义的函数。 ```php $array = array('a' => 1, 'b' => 2, 'c' => 3); array_walk($array, function(&$value, $key) { $value = $value * 2; }); print_r($array); // 输出:Array ( [a] => 2 [b] => 4 [c] => 6 ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值