如何使用array_walk_recursive

时间:2011-07-01 12:11:30

标签: php arrays recursion

如何使用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);
}

3 个答案:

答案 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 );
}