是否可以将PHP array_walk与匿名函数一起使用(在PHP 5.3之前)?或者一些解决方法..
我在公共类方法中使用array_walk,我不想定义PHP函数..我想做类似的事情:
array_walk($array, function($value) {...});
如果不可能,可以使用类方法而不是函数吗?
答案 0 :(得分:4)
array_walk($array, create_function('&$v, $k', '$v...'));
答案 1 :(得分:3)
是的,您可以将数组作为第二个参数传递,包含对象和方法名称为string:
class Foo {
public function a($a) {
array_walk($a, array($this, 'b'));
}
private function b($v, $k) {
print $v;
}
}
$f = new Foo();
$f->a(array('foo', 'bar'));
打印
foobar
array_walk()
的签名(可以在文档中找到),将第二个参数定义为callback,可以找到以下描述:
PHP函数的名称作为字符串传递。除了语言结构之外,可以使用任何内置或用户定义的函数,例如:
array()
,echo()
,empty()
,eval()
,exit()
,{ {1}},isset()
,list()
或print()
。实例化对象的方法作为
unset()
传递,其中包含索引为0的对象和索引为1的方法名称。也可以传递静态类方法,而无需通过传递类名而不是索引0处的对象来实例化该类的对象。
除了常见的用户定义函数外,
array
还可用于创建匿名回调函数。从PHP 5.3.0开始,也可以将闭包传递给回调参数。
答案 2 :(得分:2)
可以使用create_function()
。
从手册中窃取:
<?php
$av = array("the ", "a ", "that ", "this ");
array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
print_r($av);
?>
答案 3 :(得分:1)
回答第二部分(第一部分回答得很好,我想,虽然我从来没有真正喜欢create_function
):
如果不可能,可以使用类方法而不是函数吗?
是,分别为对象方法和静态方法传递array($instance,'methodname')
或array('classname','methodname')
。