如何使用array_walk_recursive()
代替此:
function check_value($val){
if(is_array($val)){
foreach($val as $key => $value)
$val[$key] = check_value($value);
return $val;
}
return clean_value($val);
}
答案 0 :(得分:8)
我认为这应该做同样的事情。请注意,函数的参数作为引用传递(即&$value
)。
array_walk_recursive($array, function(&$value) {
$value = clean_value($value);
});
对于较旧的PHP版本:
function check_value(&$value) {
$value = clean_value($value);
}
array_walk_recursive($array, 'check_value');
答案 1 :(得分:1)
我会重写clean_value函数来获取引用参数。 例如,这两个片段在功能上是相同的:
1:
function clean_value($value) {
//manipulate $value
return $value;
}
$value = clean_value($value);
和
2:
function clean_value(&$value) {
//manipulate $value
}
clean_value($value);
对于后者(2),我们可以在array_walk_recursive中使用它,如下所示:
array_walk_recursive($value_tree, 'clean_value');
如果我们无法编辑clean_value,我会按如下方式解决:
$clean_by_reference = function(&$val) {
$val = clean_value($val);
};
array_walk_recursive($value_tree, $clean_by_reference);
希望这有帮助!
答案 2 :(得分:0)
这应该有效:
function check_value ( $val ) {
if ( is_array ( $val ) ) array_walk_recursive ( $val, 'check_value' );
return clean_value ( $val );
}