美文网首页
格式化函数

格式化函数

作者: pengtoxen | 来源:发表于2018-07-31 17:06 被阅读0次

在写业务代码的时候,经常碰到需要处理一组数据的时候,通常的代码是这样的

//格式化$item[$key1]这个值,复杂点的情况可能需要经过两个函数func1和func2才能得到想要的结果
foreach ($arr as &$item){
  $item = func1($item);
  $item = func2($item);
}

//我们也可以用array_map()系统函数来处理
$arr = array_map(func1,$arr);
$arr = array_map(func2,$arr);

如果有另一组数组也要格式化,怎么办?

foreach ($arr2 as &$item){
  $item = func1($item);
  $item = func2($item);
}

//我们也可以用array_map()系统函数来处理
$arr2 = array_map(func1,$arr2);
$arr2 = array_map(func2,$arr2);

可以看到,我们重复写了一套代码.
为了以后避免出现这样的情况,我们可以写个统一处理的函数来处理

//格式化数据
function parseReturn(array $data = [], array $filters = [], $nested = true)
{
  if (!$data) {
    return [];
  }
  foreach ($filters as $filter) {
    if ($nested) {
      array_walk_recursive($data, $filter);
    } else {
      array_walk($data, $filter);
    }
  }
  return $data;
}

//处理$arr
$funcs = ['func1','func2'];
$arr = parseReturn($arr,$funcs);

//理$arr2
$arr2 = parseReturn($arr2,$funcs);

//递归处理$arr3中的每个元素
$arr3 = parseReturn($arr3,$funcs,true);

接下来我们讨论另外一个经常碰到的问题,处理单一原数据格式化为我们想要的数据.

//处理data
$data = func1($data);
$data = func2($data);
$data = func3($data);

//处理data2
$data2 = func1($data2);
$data2 = func2($data2);
$data2 = func100($data2);

我们可以参考处理数组的方法做一些更改

    //过滤函数
    function argFilter($arg, array $filters = [])
    {
        if (!$arg) {
            return false;
        }
        if (!$filters) {
            $filters = [
                'trim',
                'strip_tags',
            ];
        }
        if (is_array($arg) && $arg) {
            foreach ($arg as &$item) {
                $item = funcHandler($filters, $item);
            }
            return $arg;
        }
        return funcHandler($filters, $arg);
    }
    
    //过滤器
    function funcHandler($filters, $arg)
    {
        return array_reduce($filters, function ($carry, $item) {
            if (is_callable($item)) {
                return $item($carry);
            }
            return $carry;
        }, $arg);
    }

这里我们用了array_reduce这个迭代函数,将每次处理的结果当做下一次处理的参数.

//处理data
$funcs = ['func1','func2','func3'];
$data = argFilter($data,$funcs);

//处理data2
$funcs = ['func1','func2','func100'];
$data2= argFilter($data2,$funcs);

可能有人会问这样处理和之前的没多大区别啊?
区别就是我这样写觉得舒服:)

相关文章

  • PHP 日期和时间函数

    PHP date() 函数用于对日期或时间进行格式化。 PHP Date() 函数:函数把时间戳格式化为更易读的日...

  • printf与sprintf的区别

    printf函数: 把文字格式化以后输出,如: sprintf函数: 跟printf相似,但不打印,而是返回格式化...

  • format() 格式化函数

    Python format 格式化函数 | 菜鸟教程

  • Lua string.format()

    前言# 今天来看一个既熟悉又陌生的函数,这个函数是用来格式化参数的,其格式化的规则和c语言中的printf()函数...

  • 18-Go语言时间和日期

    时间和日期函数 当前时间获取 函数:time.Now() 日期函数 日期字符串格式化 第一种格式化方法 第二种格式...

  • MySQL语法入门(二)

    MySQL语法入门(二) 数据库加密函数 控制流函数 格式化函数和类型转换函数

  • fmt print

    格式化 Golang的fmt包中含有格式化I/O函数,类似于C语言中的printf和scanf。 函数描述fmt....

  • 笔记简记

    1. 字符输入函数 getchar () 2.字符输出函数 putchar() 3.格式化输入函数 scanf()...

  • Python基础014--日期格式化、时间戳和时间的转换

    日期格式化、时间戳和时间的转换 日期格式化python中日期格式化符号 常用的time模块中的内置函数

  • 格式化字符串函数 str.format() 使用

    来自菜鸟教程,字符串之format格式化函数Python2.6开始,新增了一种格式化字符串的函数 str.form...

网友评论

      本文标题:格式化函数

      本文链接:https://www.haomeiwen.com/subject/ruehvftx.html