笔记:常用数组处理函数与时间处理函数

写在前面

框架带来的便利让我们编程越来越简单,不过某些情况下总会手写一些无聊的处理函数。
所以能用框架就用框架,别难为自己。。。
顺手记录一下吧,愿以后不再写代码。

函数代码

常用数组处理:ArrHelper

<?php

namespace App\Test;


class ArrHelper
{

    /**
     * 获取数组的指定key,可二维
     * @param $array
     * @param $keys
     * @return array
     */
    public static function only($array, $keys)
    {
        if (isset($array[0]) && is_array($array[0])) {
            $arr = [];
            foreach ($array as $key => $val) {
                $arr[] = array_intersect_key($val, array_flip((array)$keys));
            }
        } else {
            $arr = array_intersect_key($array, array_flip((array)$keys));
        }
        return $arr;
    }

    /**
     * 获取数组的指定key之外的,可二维
     * @param $array
     * @param $keys
     * @return array
     */
    public static function except($array, $keys)
    {
        if (isset($array[0]) && is_array($array[0])) {
            $arr = [];
            foreach ($array as $key => $val) {
                $arr[] = array_diff_key($val, array_flip((array)$keys));
            }
        } else {
            $arr = array_diff_key($array, array_flip((array)$keys));
        }
        return $arr;
    }

    /**
     * 获取第一个元素
     * @param $array
     * @return mixed
     */
    public static function first($array)
    {
        reset($array);
        return current($array);
    }

    /**
     * 获取最后一个元素
     * @param $array
     * @return mixed
     */
    public static function end($array)
    {
        $end = end($array);
        reset($array);
        return $end;
    }

    /**
     * isList
     * @param $array
     * @return bool
     */
    public static function isList($array)
    {
        $keys = array_keys($array);
        return $keys === array_keys($keys);
    }


    /**
     * 二维数组的指定列排序
     * @param $array
     * @param $field
     * @param int $asc
     * @return mixed
     */
    public static function sort($array, $field, $asc = 1)
    {
        usort($array, function ($a, $b) use ($field, $asc) {
            return $asc ? $a[$field] <=> $b[$field] : $b[$field] <=> $a[$field];
        });

        return $array;
    }

    /**
     * where条件筛选,仅可“=”
     * @param $array
     * @param $where
     * @param bool $strict
     * @return array
     */
    public static function where($array, $where, $strict = true)
    {
        $arr = [];
        foreach ($array as $key => $value) {
            $flag = true;
            foreach ($where as $field => $val) {
                if ($strict) {
                    if ($value[$field] !== $val) {
                        $flag = false;
                        break;
                    }
                } else {
                    if ($value[$field] <> $val) {
                        $flag = false;
                        break;
                    }
                }
            }
            if ($flag) {
                $arr[] = $value;
            }
        }

        return $arr;
    }

    /**
     * where条件筛选,仅可“=”
     * @param $array
     * @param $where
     * @param bool $strict
     * @return int
     */
    public static function count($array, $where, $strict = true)
    {
        return count(self::where($array, $where, $strict));
    }

    /**
     * 按指定列分组统计
     * @param $array
     * @param $field
     * @param bool $format
     * @return array
     */
    public static function groupCount($array, $field, $format = false)
    {
        $groupArr = array_values(array_unique(array_column($array, $field)));
        $arr = [];
        foreach ($array as $key => $value) {
            foreach ($groupArr as $v) {
                if ($value[$field] === $v) {
                    isset($arr[$v]) ? $arr[$v]++ : ($arr[$v] = 1);
                    break;
                }
            }
        }
        if ($format) {
            $tmpArr = [];
            foreach ($arr as $key => $val) {
                $tmpArr[] = [
                    'id' => $key,
                    'count' => $val,
                    'field' => $field,
                ];
            }
            $arr = $tmpArr;
        }

        return $arr;
    }

    /**
     * 按指定列分组
     * @param $array
     * @param $field
     * @return array
     */
    public static function groupBy($array, $field)
    {
        $groupArr = array_values(array_unique(array_column($array, $field)));
        $arr = [];
        foreach ($array as $key => $value) {
            foreach ($groupArr as $v) {
                if ($value[$field] === $v) {
                    isset($arr[$v]) ? array_push($arr[$v], $value) : ($arr[$v][] = $value);
                    break;
                }
            }
        }

        return $arr;
    }


    /**
     * 点语法
     * @param $arr
     * @param $keyName
     * @return mixed|null
     */
    public static function getArrDot(&$arr, $keyName)
    {
        $keys = explode('.', $keyName);
        foreach ($keys as $key) {
            if (!is_array($arr) || !array_key_exists($key, $arr)) {
                return null;
            }
            $arr = &$arr[$key];
        }

        return $arr;
    }

}

常用日期时间范围:DateTimeHelper

<?php

namespace App\Test;


class DateTimeHelper
{

    /**
     * 今天开始时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function todayBegin($isTimeStamp = false)
    {
        $timeStamp = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 今天结束时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function todayEnd($isTimeStamp = false)
    {
        $timeStamp = mktime(23, 59, 59, date('m'), date('d'), date('Y'));
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 昨天开始时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function yesterdayBegin($isTimeStamp = false)
    {
        $timeStamp = self::todayBegin(true) - 1 * 24 * 3600;
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 昨天结束时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function yesterdayEnd($isTimeStamp = false)
    {
        $timeStamp = self::todayEnd(true) - 1 * 24 * 3600;
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 本周开始时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function weekBegin($isTimeStamp = false)
    {
        $timeStamp = mktime(0, 0, 0, date('m'), date('d') - date('w') + 1, date('Y'));
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 本周结束时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function weekEnd($isTimeStamp = false)
    {
        $timeStamp = mktime(23, 59, 59, date('m'), date('d') - date('w') + 7, date('Y'));
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 上周开始时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function lastWeekBegin($isTimeStamp = false)
    {
        $timeStamp = self::weekBegin(true) - 7 * 24 * 3600;
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 上周结束时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function lastWeekEnd($isTimeStamp = false)
    {
        $timeStamp = self::weekEnd(true) - 7 * 24 * 3600;
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 本月开始时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function monthBegin($isTimeStamp = false)
    {
        $timeStamp = mktime(0, 0, 0, date('m'), 1, date('Y'));
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 本月结束时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function monthEnd($isTimeStamp = false)
    {
        $timeStamp = mktime(23, 59, 59, date('m'), date('t'), date('Y'));
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 当年开始时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function yearBegin($isTimeStamp = false)
    {
        $timeStamp = mktime(0, 0, 0, 1, 1, date('Y'));
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

    /**
     * 当年结束时间
     * @param bool $isTimeStamp
     * @return false|int|string
     */
    public static function yearEnd($isTimeStamp = false)
    {
        $timeStamp = mktime(23, 59, 59, 12, 31, date('Y'));
        return $isTimeStamp ? $timeStamp : date('Y-m-d H:i:s', $timeStamp);
    }

}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!