这是我在php中的类的简化版本:
class someClass {
public function edit_array($array) {
array_walk_recursive($array, 'edit_value');
}
public function edit_value(&$value) {
//edit the value
}
}
现在将类中的函数名称发送到array_walk_recursive显然不起作用。但是,除了使用循环重新创建array_walk_recursive之外还有其他工作吗(我会将其保存为我的最后手段)?提前谢谢!
答案 0 :(得分:23)
您的方法未定义为静态,因此我假设您正在实例化。在这种情况下,您可以传递$this
:
public function edit_array($array) {
array_walk_recursive($array, array($this, 'edit_value'));
}
答案 1 :(得分:20)
该函数需要静态引用。我成功地使用了这段代码:
<?php
class someClass {
public function edit_array($array) {
array_walk_recursive($array, 'someClass::edit_value');
}
public static function edit_value(&$value) {
echo $value;
}
}
$obj = new SomeClass();
$obj->edit_array(array(1,2,3,4,5,6,7));
答案 2 :(得分:7)
尝试:
class someClass {
static public function edit_array($array) {
array_walk_recursive($array, array(__CLASS__,'edit_value'));
}
static public function edit_value(&$value) {
//edit the value
}
}
NB:我使用了__CLASS__
,因此更改类名不会妨碍执行。您也可以使用"someClass"
。
或者在实例中:
class someClass {
public function edit_array($array) {
array_walk_recursive($array, array($this,'edit_value'));
}
public function edit_value(&$value) {
//edit the value
}
}
答案 3 :(得分:0)
你也可以内联..
array_walk_recursive($myArray, function (&$item){
$item = mb_convert_encoding($item, 'UTF-8');
});