Thinkphp语法小知识/实用小方法
·
Thinkphp语法小知识:
1.数组解构赋值(ThinkPHP 高频写法,php版本7.1及以上)
$validate = 'User.edit';
[$validate, $scene] = explode('.', $validate);
// 拆分后:
// $validate = 'User'
// $scene = 'edit'
2.展开运算符用法(php版本5.6及以上)
$array = [1,2];
$sub_data = [3,4,5];
array_push($array, ...$sub_data);
// 添加后
// $array = [1,2,3,4,5]
把 $sub_data 数组里每一项单独拆开,依次传给 array_push 作为追加元素。
3.根据月、日获取星座
/**
* @param unknown $month 月
* @param unknown $day 日
* @return boolean|multitype:
*/
function get_zodiac_sign($month, $day)
{
// 检查参数有效性
if ($month < 1 || $month > 12 || $day < 1 || $day > 31) {
return false;
}
// 星座名称以及开始日期
$signs = array(
array("20" => "水瓶座"),
array("19" => "双鱼座"),
array("21" => "白羊座"),
array("20" => "金牛座"),
array("21" => "双子座"),
array("22" => "巨蟹座"),
array("23" => "狮子座"),
array("23" => "处女座"),
array("23" => "天秤座"),
array("24" => "天蝎座"),
array("22" => "射手座"),
array("22" => "摩羯座")
);
list($sign_start, $sign_name) = each($signs[(int)$month - 1]);
if ($day < $sign_start) {
list($sign_start, $sign_name) = each($signs[($month - 2 < 0) ? $month = 11 : $month -= 2]);
}
return $sign_name;
}
4.获取格式化显示时间
/**
* 获取格式化显示时间
* @param int $time 时间戳
* @return false|string 返回结果
*/
function get_format_time($time)
{
$time = (int)substr($time, 0, 10);
$int = time() - $time;
$str = '';
if ($int <= 2) {
$str = sprintf('刚刚', $int);
} elseif ($int < 60) {
$str = sprintf('%d秒前', $int);
} elseif ($int < 3600) {
$str = sprintf('%d分钟前', floor($int / 60));
} elseif ($int < 86400) {
$str = sprintf('%d小时前', floor($int / 3600));
} elseif ($int < 1728000) {
$str = sprintf('%d天前', floor($int / 86400));
} else {
$str = date('Y年m月d日', $time);
}
return $str;
}
5.获取设备类型(苹果或安卓)
/**
* 获取设备类型(苹果或安卓)
* @return int 返回结果
*/
function get_device_type()
{
// 全部变成小写字母
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
$type = 0;
// 分别进行判断
if (strpos($agent, 'iphone') !== false || strpos($agent, 'ipad') !== false) {
$type = 1;
}
if (strpos($agent, 'android') !== false) {
$type = 2;
}
return $type;
}
6.常用的正则表达式
preg_match('/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/', $str); // 邮箱
preg_match('/^1[3456789]{1}\d{9}$/', $mobile); // 手机号
preg_match('/^[1-9][0-9]{5}$/', $code); // 邮编
7.验证身份证是否正确
/**
* 验证身份证是否正确
* @param string $idno 身份证号
* @return bool 返回结果true或false
*/
function is_idcard($idno)
{
$idno = strtoupper($idno);
$regx = '/(^\d{15}$)|(^\d{17}([0-9]|X)$)/';
$arr_split = array();
if (!preg_match($regx, $idno)) {
return false;
}
// 检查15位
if (15 == strlen($idno)) {
$regx = '/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/';
@preg_match($regx, $idno, $arr_split);
$dtm_birth = "19" . $arr_split[2] . '/' . $arr_split[3] . '/' . $arr_split[4];
if (!strtotime($dtm_birth)) {
return false;
} else {
return true;
}
} else {
// 检查18位
$regx = '/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/';
@preg_match($regx, $idno, $arr_split);
$dtm_birth = $arr_split[2] . '/' . $arr_split[3] . '/' . $arr_split[4];
// 检查生日日期是否正确
if (!strtotime($dtm_birth)) {
return false;
} else {
// 检验18位身份证的校验码是否正确。
// 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
$arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$sign = 0;
for ($i = 0; $i < 17; $i++) {
$b = (int)$idno[$i];
$w = $arr_int[$i];
$sign += $b * $w;
}
$n = $sign % 11;
$val_num = $arr_ch[$n];
if ($val_num != substr($idno, 17, 1)) {
return false;
} else {
return true;
}
}
}
}
8.判断是否为图片格式
/**
* 判断是否为图片格式
* @param $filename
* @return bool|false|int
*/
function is_image($filename)
{
$types = '.gif|.GIF|.jpg|.JPG|.jpeg|.JPEG|.png|.PNG|.bmp|.BMP';
//定义检查的图片类型
if (file_exists($filename)) {
$info = getimagesize($filename);
$ext = image_type_to_extension($info['2']);
return stripos($types, $ext);
} else {
return false;
}
}
更多推荐

所有评论(0)