笔记:常用数组处理函数与时间处理函数
写在前面
框架带来的便利让我们编程越来越简单,不过某些情况下总会手写一些无聊的处理函数。
所以能用框架就用框架,别难为自己。。。
顺手记录一下吧,愿以后不再写代码。
函数代码
常用数组处理: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 协议》,转载必须注明作者和本文链接