使用 array_walk_recursive 从类中调用函数
Posted
技术标签:
【中文标题】使用 array_walk_recursive 从类中调用函数【英文标题】:calling function from within class with array_walk_recursive 【发布时间】:2011-08-09 00:21:46 【问题描述】:这是我在 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 之外,还有其他解决方法吗(我将把它保存为最后的手段)?提前致谢!
【问题讨论】:
【参考方案1】:你也可以内联..
array_walk_recursive($myArray, function (&$item)
$item = mb_convert_encoding($item, 'UTF-8');
);
【讨论】:
【参考方案2】:试试:
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
注意:我使用了__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
【讨论】:
CLASS 仅在您尝试静态调用时才需要。【参考方案3】:您的方法未定义为静态的,因此我假设您正在实例化。这种情况下,你可以通过$this
:
public function edit_array($array)
array_walk_recursive($array, array($this, 'edit_value'));
【讨论】:
这是更好的答案。接受的答案并没有真正回答问题,只是为静态类提供了一个替代方案,这有时是不可取的。 不错的解决方案!【参考方案4】:函数需要被静态引用。我成功使用了这段代码:
<?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));
【讨论】:
以上是关于使用 array_walk_recursive 从类中调用函数的主要内容,如果未能解决你的问题,请参考以下文章
array_walk_recursive 地址引用报错的问题
PHP二维数组转换成一维数组,一个变量多个二维数组转换成一维数组,PHP二维数组(或任意维数组)转换成一维数组的方法汇总,array_reduce(); array_walk_recursive()