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数组函数大全

  • 相关阅读:
    HDU 1525
    kmp模板
    hdu 4616 Game(树形DP)
    hdu 4619 Warm up 2(并查集活用)
    hdu 4614 Vases and Flowers(线段树加二分查找)
    Codeforces 400D Dima and Bacteria(并查集最短路)
    poj 2823 Sliding Window (单调队列)
    hdu 2196 Computer(树形dp)
    hdu 4604 Deque
    最短路径
  • 原文地址:https://www.cnblogs.com/52php/p/5681820.html
Copyright © 2011-2022 走看看