zoukankan      html  css  js  c++  java
  • 自定义 array_map() 对应的递归函数 array_map_recursive()

    array_walk 有个原生递归函数 array_walk_recursive($arr, 'function', 'words'),但是 array_map 却没有对应的递归函数 array_map_recursive,我们可以自定义一个:

    function array_map_recursive($filter, $data) 
    {
        $result = array();
        foreach ($data as $key => $val) 
    	{
            $result[$key] = is_array($val)
             ? array_map_recursive($filter, $val)
             : call_user_func($filter, $val);
        }
    
        return $result;
    }

    应用举例:

    $arr = array(
    	'a' => '2',
    	'b' => array(
    		'cc' => 'wen',
    		'dd' => 'jian',
    		'ee' => 'bao'
    	)
    );
    
    function func_a($value)
    {
    	$value .= '_AAA';
    	return $value;
    }
    
    var_dump($arr);
    
    $arr = array_map_recursive('func_a', $arr);
    
    var_dump($arr);

    其实吧,完全可以用 array_walk_recursive() 函数 实现该功能,如下代码所示:

    $arr = array(
    	'a' => '2',
    	'b' => array(
    		'cc' => 'wen',
    		'dd' => 'jian',
    		'ee' => 'bao'
    	)
    );
    
    function func_b(&$value)
    {
    	$value .= '_AAA';
    }
    
    var_dump($arr);
    
    array_walk_recursive($arr, 'func_b');
    
    var_dump($arr);

    输出:

    array(2) {
      ["a"]=>
      string(1) "2"
      ["b"]=>
      array(3) {
        ["cc"]=>
        string(3) "wen"
        ["dd"]=>
        string(4) "jian"
        ["ee"]=>
        string(3) "bao"
      }
    }
    array(2) {
      ["a"]=>
      string(5) "2_AAA"
      ["b"]=>
      array(3) {
        ["cc"]=>
        string(7) "wen_AAA"
        ["dd"]=>
        string(8) "jian_AAA"
        ["ee"]=>
        string(7) "bao_AAA"
      }
    }
    

      

      

    延伸阅读:

    PHP数组函数大全

  • 相关阅读:
    Jmeter之断言处理
    JMeter工具简单介绍
    TCP的三次握手和四次挥手
    浅谈cookie、session
    浅谈HTTP中Get与Post的区别
    DNS原理入门
    互联网协议简介
    测试与部署
    部分代码片段
    apache和php扩展问题
  • 原文地址:https://www.cnblogs.com/52php/p/5681820.html
Copyright © 2011-2022 走看看