【问题标题】:How to use array_walk_recursive如何使用 array_walk_recursive
【发布时间】:2011-07-01 12:11:29
【问题描述】:

我怎样才能使用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);
}

?

【问题讨论】:

    标签: php arrays recursion


    【解决方案1】:

    我认为这应该做同样的事情。请注意,函数的参数作为引用传递(即&$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');
    

    【讨论】:

    • @BestDeveloper,很可能您的 PHP 版本太旧。我已经更新了我的答案。
    【解决方案2】:

    我会重写 clean_value 函数以获取引用参数。 例如,这两个 sn-ps 在功能上是相同的:

    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);
    

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      这应该可行:

      function check_value ( $val ) {
          if ( is_array ( $val ) ) array_walk_recursive ( $val, 'check_value' );
          return clean_value ( $val );
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 2014-04-07
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多