Mysql 根据首字母查询

一、函数

这里是通过函数调用进行获取汉字的拼音首字母。

DELIMITER $$
CREATE FUNCTION `pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE V_COMPARE VARCHAR(255);
DECLARE V_RETURN VARCHAR(255);
DECLARE I INT;
SET I = 1;
SET V_RETURN = '';
#循环截取字符
while I < LENGTH(P_NAME) do
SET V_COMPARE = SUBSTR(P_NAME, I, 1);
IF (V_COMPARE != '') THEN
#字符串拼接
SET V_RETURN = CONCAT(V_RETURN, to_frist_pinyin(V_COMPARE));
END IF;
SET I = I + 1;
end while;
IF (ISNULL(V_RETURN) or V_RETURN = '') THEN
SET V_RETURN = P_NAME;
END IF;
RETURN V_RETURN;
END$$

CREATE FUNCTION `to_frist_pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE V_RETURN VARCHAR(255);
DECLARE V_FIRST_CHAR VARCHAR(255);
#这块主要意思是假如传入的是英文串的话,只取首字母
set V_FIRST_CHAR =UPPER(LEFT(CONVERT(P_NAME USING gbk),1));
set V_RETURN = V_FIRST_CHAR;
#如果是这些特殊符号,直接返回#
IF V_FIRST_CHAR in ('(',')','《','》')
THEN SET V_RETURN = '';
#两个不相等只有一个情况,V_FIRST_CHAR是中文汉字或者中文符号。
elseif LENGTH( V_FIRST_CHAR) <> CHARACTER_LENGTH( V_FIRST_CHAR )
then
SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME USING gbk),1)),16,10),
0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,
0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');
#如果是下面的直接原样输出
elseif V_FIRST_CHAR in ('A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z',
'1','2','3','4','5','6','7','8','9','0','*','+','-','=','/','\\','{','}','[',']','(',')','(',')')
then SET V_RETURN = V_RETURN;
#其他的输出#
else
SET V_RETURN = '#';
END IF;
#为空的话输出#
RETURN IFNULL(V_RETURN,'#');
END$$
DELIMITER ;

二、执行遇到问题

set global log_bin_trust_function_creators = 1;

设置为1,创建完后,可以再设置回去。

简单介绍一下,当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。

三、如何使用

select id,title,newstime,titlepic from phome_ecms_photo where pinyin(left(title,1))='D' limit 100

举例,要查询标题字段以D开头的数据,查询结果如下:

Pycharm激活码,Pycharm稳定专属激活码(全网最新)

Pycharm正版专属激活码领取(永久更新)

2018.2~2022版本用这个,下面激活码直接复制粘贴到activation code即可激活软件

下面是正版激活,会给大家一直更新的,直接复制粘贴到activation code即可激活

更换新激活码的时候如果还显示suspended,用新激活码再激活一次即可

35TQNTIWIC-eyJsaWNlbnNlSWQiOiIzNVRRTlRJV0lDIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5r+A5rS7IHd3d8K3YWppaHVvwrdjb20iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJQQyIsInBhaWRVcFRvIjoiMjAyMi0wNy0wNSIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUFBDIiwicGFpZFVwVG8iOiIyMDIyLTA3LTA1IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBXUyIsInBhaWRVcFRvIjoiMjAyMi0wNy0wNSIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQU0kiLCJwYWlkVXBUbyI6IjIwMjItMDctMDUiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUENXTVAiLCJwYWlkVXBUbyI6IjIwMjItMDctMDUiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAxMjAyMjA2MDZQU0FNMDAwMDA1IiwiaGFzaCI6IjM0NzAzNjUxLzA6MTExMjYwOTc5IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-dhurTGA1v7l1FlzPxtw9xnqWN8Zoz2UUZ/h+kw+YQtkZBr5vyXzGEz9lhdBAy7Ie0kFg7ujEcPYx9ev0m93ZBHDq7ke0JdS6gPzrZhKqi2uhwi0evdlU/GmHlAf5oL7Ou/IPVEcrZ5fEr+aXPhxbBezAKbVn54/G+CU3triouIE0iNYvKpMxEm2eZV1Nk1V7s4DHHbF5b+KMlRJJvI3KAOnhPB9IO8zb36F02mvoO5Fek6wml/fZLeMpVaOPibIjgupmxItTLM2WZPDnemb9QsTAu1ciJGG5igzBD6pJ2InuvQBK9kMCeglTJ5lN14AfaWKv2DJT7xuZzRmvqmEPlQ==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCP4uk4SlVdA5nuA3DQC+NsEnZS9npFnO0zrmMWcz1++q2UWJNuGTh0rwi+3fUJIArfvVh7gNtIp93rxjtrQAuf4/Fa6sySp4c32MeFACfC0q+oUoWebhOIaYTYUxm4LAZ355vzt8YeDPmvWKxA81udqEk4gU9NNAOz1Um5/8LyR8SGsSc4EDBRSjcMWMwMkYSauGqGcEUK8WhfplsyF61lKSOFA6VmfUmeDK15rUWWLbOMKgn2cxFA98A+s74T9Oo96CU7rp/umDXvhnyhAXSukw/qCGOVhwKR8B6aeDtoBWQgjnvMtPgOUPRTPkPGbwPwwDkvAHYiuKJ7Bd2wH7rAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAB2J1ysRudbkqmkUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/wi9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD

2018.1以下版本用这个

35TQNTIWIC-eyJsaWNlbnNlSWQiOiIzNVRRTlRJV0lDIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5r+A5rS7IHd3d8K3YWppaHVvwrdjb20iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJQQyIsInBhaWRVcFRvIjoiMjAyMi0wNy0wNSJ9LHsiY29kZSI6IlBQQyIsInBhaWRVcFRvIjoiMjAyMi0wNy0wNSJ9LHsiY29kZSI6IlBXUyIsInBhaWRVcFRvIjoiMjAyMi0wNy0wNSJ9LHsiY29kZSI6IlBTSSIsInBhaWRVcFRvIjoiMjAyMi0wNy0wNSJ9LHsiY29kZSI6IlBDV01QIiwicGFpZFVwVG8iOiIyMDIyLTA3LTA1In1dLCJoYXNoIjoiMzQ3MDM2NTEvMDoxMTEyNjA5NzkiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-odQT4YAf7jxS425neTrnOFILScY03lHAubdbHFboNy0KwdOPMhS5RqQ+MIulTv3RjLZ0/z1EQ68Nvcbb8iOIM7CzpKlSLtaOE6AokdLRh8Twa7Xy7wZFVYRFgd7VjYoOFUHq1ezAs8GPRYGFjsgx1dMZpbndXoLBSK43G5v4lW3HMXK/0XYsMlbvcp3cGU32E2aUveewRwoIjmjiu2J6TV9bkc9lYRiYAT8qK2n0iqKS2HcH0+xZY8FVfD6xxeHJFrgEY4kmNLI/c6RGeNEU4j4W3JYd3KAh4WiX1zY9hmkfqEioFHysIj3w07onzugnH5PuyRx7L80SeW826ihSpA==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCP4uk4SlVdA5nuA3DQC+NsEnZS9npFnO0zrmMWcz1++q2UWJNuGTh0rwi+3fUJIArfvVh7gNtIp93rxjtrQAuf4/Fa6sySp4c32MeFACfC0q+oUoWebhOIaYTYUxm4LAZ355vzt8YeDPmvWKxA81udqEk4gU9NNAOz1Um5/8LyR8SGsSc4EDBRSjcMWMwMkYSauGqGcEUK8WhfplsyF61lKSOFA6VmfUmeDK15rUWWLbOMKgn2cxFA98A+s74T9Oo96CU7rp/umDXvhnyhAXSukw/qCGOVhwKR8B6aeDtoBWQgjnvMtPgOUPRTPkPGbwPwwDkvAHYiuKJ7Bd2wH7rAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAB2J1ysRudbkqmkUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/wi9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD

激活后如果显示key is invalid,这是因为你破解过软件的原因,请按如下操作
打开软件,help edit VM options ,删掉最下面一行的javaagent,重启软件即可

(如果是较新的版本Pycharm和Code with me都要激活一次)

转载于:https://www.ajihuo.com/pycharm/4197.html

ThinkPHP validate 验证规则

下面是部分tp5内置的验证规则:

格式验证类:

'name'=>'require'

验证某个字段的值是否为数字(采用filter_var验证),例如:

number 或者 integer
'name'=>'number'

验证某个字段的值是否为浮点数字(采用filter_var验证),例如:

float
'name'=>'float'

验证某个字段的值是否为布尔值(采用filter_var验证),例如:

  boolean
'boolean'=>'boolean'

验证某个字段的值是否为email地址(采用filter_var验证),例如:

    email
'email'=>'email'

验证某个字段的值是否为数组,例如:

array
'info'=>'array'

验证某个字段是否为为 yes, on, 或是 1。这在确认”服务条款”是否同意时很有用,例如:

    accepted
'accept'=>'accepted'

验证值是否为有效的日期,例如:

  注:会对日期值进行strtotime后进行判断。

date
'date'=>'date'

验证某个字段的值是否为字母,例如:

alpha
'name'=>'alpha'

验证某个字段的值是否为字母和数字,例如:

    alphaNum
'name'=>'alphaNum'

验证某个字段的值是否为字母和数字,下划线_及破折号-,例如:

alphaDash
'name'=>'alphaDash'

验证某个字段的值是否为有效的域名或者IP,例如:

activeUrl
'host'=>'activeUrl'

验证某个字段的值是否为有效的URL地址(采用filter_var验证),例如:

url
'url'=>'url'

验证某个字段的值是否为有效的IP地址(采用filter_var验证),例如:

  注:支持验证ipv4和ipv6格式的IP地址。

ip
'ip'=>'ip'

验证某个字段的值是否为指定格式的日期,例如:

    dateFormat:format
'create_time'=>'dateFormat:y-m-d'

长度和区间验证类

in
'num'=>'in:1,2,3'

验证某个字段的值不在某个范围,例如:

notIn
'num'=>'notIn:1,2,3'

验证某个字段的值是否在某个区间,例如:

    between
'num'=>'between:1,10'

验证某个字段的值不在某个范围,例如:

notBetween
'num'=>'notBetween:1,10'

验证某个字段的值的长度是否在某个范围,例如:

    length:num1,num2
'name'=>'length:4,25'

  或者指定长度

'name'=>'length:4'

验证某个字段的值的最大长度,例如:

max:number

'name'=>'max:25'

如果验证的数据是数组,则判断数组的长度。
如果验证的数据是File对象,则判断文件的大小。

验证某个字段的值的最小长度,例如:

min:number
'name'=>'min:5'

如果验证的数据是数组,则判断数组的长度。
如果验证的数据是File对象,则判断文件的大小。

验证某个字段的值是否在某个日期之后,例如:

after:日期
'begin_time' =>'after:2016-3-18',

验证某个字段的值是否在某个日期之前,例如:

    before:日期
'end_time' =>'before:2016-10-01',

验证当前操作(注意不是某个值)是否在某个有效日期之内,例如:

    expire:开始时间,结束时间
'expire_time' =>'expire:2016-2-1,2016-10-01',

验证当前请求的IP是否在某个范围,例如:

    allowIp:allow1,allow2,...
'name' =>'allowIp:114.45.4.55',

  注:该规则可以用于某个后台的访问权限

验证当前请求的IP是否禁止访问,例如:

    denyIp:allow1,allow2,...
'name' =>'denyIp:114.45.4.55',

字段比较类

验证某个字段是否和另外一个字段的值一致

confirm
'repassport'=>'require|confirm:passport'

验证某个字段是否和另外一个字段的值不一致

    different
'name'=>'require|different:account'

验证是否大于等于某个值,例如:

    egt 或者 >=
'score'=>'egt:60' ||
'num'=>'>=:100'

验证是否大于某个值,例如:

    gt 或者 >
'score'=>'gt:60' ||
'num'=>'>:100'

验证是否小于等于某个值,例如:

    elt 或者 <=
'score'=>'elt:100' ||
'num'=>'<=:100'

验证是否小于某个值,例如:

    lt 或者 <
'score'=>'lt:100'||
'num'=>'<:100'

验证是否等于某个值,例如:

    eq 或者 = 或者 same
'score'=>'eq:100'||
'num'=>'=:100'||
'num'=>'same:100'

filter验证

支持使用filter_var进行验证,例如:

'ip'=>'filter:validate_ip'

正则验证

支持直接使用正则验证,例如:

'zip'=>'\d{6}'  
或者  
'zip'=>'regex:\d{6}',

 如果你的正则表达式中包含有|符号的话,必须使用数组方式定义。

'accepted'=>['regex'=>'/^(yes|on|1)$/i'],

上传验证

验证是否是一个上传文件

    file

验证是否是一个图像文件,width height和type都是可选,width和height必须同时定义。

    image:width,height,type

验证上传文件后缀

    fileExt:允许的文件后缀

验证上传文件类型

    fileMime:允许的文件类型

验证上传文件大小

    fileSize:允许的文件字节大小

行为验证

使用行为验证数据,例如:

'data'=>'behavior:\app\index\behavior\Check'

其它验证

  验证当前请求的字段值是否为唯一的,例如:

    unique:table,field,except,pk
// 表示验证name字段的值是否在user表(不包含前缀)中唯一 
   'name' => 'unique:user',  

// 验证其他字段 
   'name' => 'unique:user,account',  

// 排除某个主键值  
   'name' => 'unique:user,account,10', 

// 指定某个主键值排除  
   'name' => 'unique:user,account,10,user_id',

  如果需要对复杂的条件验证唯一,可以使用下面的方式:

 // 多个字段验证唯一验证条件
  'name'   => 'unique:user,status^account',
  // 复杂验证条件
  'name'   => 'unique:user,status=1&account='.$data['account'],

  验证某个字段的值等于某个值的时候必须,例如:

    requireIf:field,value
// 当account的值等于1的时候 password必须
  'password'=>'requireIf:account,1'

  验证某个字段有值的时候必须,例如:

    requireWith:field
 // 当account有值的时候password字段必须
  'password'=>'requireWith:account'

转载于:https://www.cnblogs.com/xuzhengzong/p/11614772.html

PHP多维数组指定列转换成一维数组

PHP中对多维数组特定列的提取,是个很常用的功能,正因为如此,PHP在5.5.0版本之后,添加了一个专用的函数array_column()。当然,如果你的PHP版本低于5.5.0,就得用别的方法处理了。

例如,对于以下这个数组:

$user = array(
    '0' => array('id' => 100, 'username' => 'a1'),
    '1' => array('id' => 101, 'username' => 'a2'),
    '2' => array('id' => 102, 'username' => 'a3'),
    '3' => array('id' => 103, 'username' => 'a4'),
    '4' => array('id' => 104, 'username' => 'a5'),
);

我们要提取其中的 usename 列,变成:

$username = array('a1', 'a2', 'a3', 'a4', 'a5');

方法有以下几种。

1 array_column函数法

用PHP内置的 array_column() 函数是最简单的方法,限制是PHP版本必须是5.5.0及以上版本,方法:

$username = array_column($user, 'username');

2 array_walk函数法

array_walk()函数使用用户自定义函数对数组中的每个元素做回调处理,实现当前功能的方法:

$username = array();
array_walk($user, function($value, $key) use (&$username){
    $username[] = $value['username'];
});

3 array_map函数法

array_map()函数和array_walk() 作用类似,将回调函数作用到给定数组的单元上。

$username = array();
array_map(function($value) use (&$username){
    $username[] = $value['username'];
}, $user);

实际使用时,我们可以用array_map()写出和PHP内置array_column()一样功能的函数:

/**
 * 获取二维数组指定的一列,并以一维数组格式返回
 * 作用和PHP5.5.0中的array_column()函数一样
 * @param $input array 需要取出数组列的多维数组(或结果集)
 * @param $column_key string 需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键。 也可以是NULL,此时将返回整个数组
 * @param $index_key string 作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
 * @return array|null
 */
function array_column($input, $column_key, $index_key = null) {
    $arr = array_map(function($d) use ($column_key, $index_key) {
        if (!isset($d[$column_key])) {
            return null;
        }
        if ($index_key !== null) {
            return array($d[$index_key] => $d[$column_key]);
        }
        return $d[$column_key];
    }, $input);

    if ($index_key !== null) {
        $tmp = array();
        foreach ($arr as $ar) {
            $tmp[key($ar)] = current($ar);
        }
        $arr = $tmp;
    }
    return $arr;
}

4 foreach循环法

foreach循环相对上面的方法效率稍微低一些,但简单容易理解。

$username = array();
foreach ($user as $value) {
    $username[] = $value['username'];
}

5 array_map变种

方法如下,意为把$user数组的每一项值的开头值移出,并获取移除的值作为新数组。注意此时新数组$username的键仍是原数组$user的键,如下。

$username = array_map('array_shift', $user);

注意:该功能会获取$user中的 id 列,而不是 username 列。

另外,如果需要获取二维数组每一项的开头列或结尾列,也可以这样做:

$username = array_map('reset', $user);
$username = array_map('end', $user);

这三个变种方法作用比较局限,仅在获取第一列或最后一列的时候有用,在复杂的数组中就难以发挥作用了。

原文:https://www.awaimai.com/885.html

HTML中video自动播放问题

在video中有个autoplay的自动播放属性,一直以为添加了该属性视屏会自动播放,但测试后才发现只添加该属性是不会自动播放的,必须要添加一个muted属性才可以自动播放。

<video muted width="100%" height="auto" autoplay="autoplay" controls>
<source src="https://yun.sevenit.cn/2020/09/18/5847745568e2f.mp4"></source>
</video>

 

记php调用系统命令实现ffmpeg视频加水印

因项目需求需要在视频上传后给视频增加文字水印,这里使用ffmpeg实现

1.下载FFmpeg(for Windows):http://ffmpeg.zeranoe.com/builds/  (其他版本可上官网上搜:http://ffmpeg.org/)。

这里下载选择版本需要注意一下,我的服务器是windows 64位的(之前用的是Linux的,似乎Linux上不能使用这个命令,所以才换成windows的了,或许可以只是我没做出来吧),

我就下载了windows64的版本,可是安装上就出现了无法启动该程序的错误提示

弄了好久都没弄好,然后我去下载了windows32位的版本。结果安装上可以运行了。

2.安装好后要配置环境变量,使其无论在那个文件下的可以执行命令。找到ffmpeg安装目录并进入bin目录下,复制改路径,到系统->高级系统设置->环境变量。找到系统环境变量中的path,将路径放在最后,记得要用分号隔开

3.上述操作完成后可以在PHP中调用命令给视频增加水印了,这是该项目中所用到的

//判断文件是否为MP4

if ($filetype == '.mp4') {//给视频加水印
        //获得视频地址
        $dir = 'C:/wwwroot/www.suxiangtop.com/d/file/p/'.$r[filepath].'/'.$r[filename];
        $n = $r[filename];
        $ar = explode('.',$n);
        $newsname = $ar[0].'s.'.$ar[1];
        //水印视频储存地址
        $newpath = 'C:/wwwroot/www.suxiangtop.com/d/file/p/'.$r[filepath].'/'.$newsname;
        $cmd="ffmpeg -i ".$dir." -vf \"drawtext=fontfile=Arial.ttf: text='suxiangtop.com':y=h-line_h-20:x=(w-text_w)/2:fontsize=25 0:fontcolor=red:shadowy=2\" -b:v 3000k ".$newpath."";
        //执行命令
        exec($cmd);
        //在执行成功后删除原视频
        // $cmds = 'rm -f /www/wwwroot/www.suxiangtop.com/d/file/p/2020/08-07/22a776f12654e243650e96fcfae1f86e.mp4';
        // shell_exec($cmds);
    }

4.上传视频

致辞视频加文字水印就完成了,有不懂得小伙伴可以参考哦!!!

透明菜单栏-滑动一定距离给菜单栏添加背景色

有时我们需要设置菜单栏为透明状态,但当页面滑动到一定距离时需要给其状态栏添加一个背景色,

1,要先设置菜单栏的背景颜色为空值,当然我们不能这样写:background-color: none;正确的写法应该是

:background-color: transparent;这样背景色才不会生效的。

2.js绑定滚动条事件,当页面滚动到一定距离时给菜单栏添加背景色。

<script>
$(function () {
//绑定滚动条事件
$(window).bind("scroll", function () {
var sTop = $(window).scrollTop();
var sTop = parseInt(sTop);
if (sTop <= 100) {
$('.site-header').css({"background-color":"transparent","box-shadow":"none"});
} else {
$('.site-header').css({"background-color":"white","box-shadow":"0 0 30px rgba(0,0,0,0.07)"});
}
});
})
</script>

这样就实现了当页面滚动到一定距离时改变菜单栏的背景色了。

浏览器标签页分屏_不同浏览器同一个tab里面怎么实现分屏?#技能get#

你是否遇到过需要看一篇超级长的文章,看到文章结尾已经完全忘记开头讲的什么;或者需要在同一篇文章的不同段落进行内容对比,想要同时看两个段落,采用同时打开两个标签页,单独拉伸浏览器大小的方法又很麻烦,而且一切换软件,无法自动回到分屏的页面,知道君教你一招,用小书签的方式,简单快速的实现浏览器分屏,切换方便!

代码

javascript: document.write('<HTML><HEAD></HEAD><FRAMESET COLS=\'50%25,*\'><FRAME SRC=' + location.href + '><FRAME SRC=' + location.href + '></FRAMESET></HTML>')

文字教程

第一步:打开任意浏览器,添加书签,书签名任意输入;

浏览器标签页分屏_不同浏览器同一个tab里面怎么实现分屏?#技能get#

第二步:修改书签地址;

浏览器标签页分屏_不同浏览器同一个tab里面怎么实现分屏?#技能get#

第三步:将后文提供的代码,粘贴到地址栏;

浏览器标签页分屏_不同浏览器同一个tab里面怎么实现分屏?#技能get#

第四步:点击刚才我们创建的书签看看效果。

浏览器标签页分屏_不同浏览器同一个tab里面怎么实现分屏?#技能get#

浏览器标签页分屏_不同浏览器同一个tab里面怎么实现分屏?#技能get#

 

视频教程

转载于:https://blog.ccswust.org/16028.html

不蒜子 | 给网站、博客文章添加阅读次数统计,我用两行代码 搞定计数

静态网站建站现在有很多快速的技术和平台,但静态是优点也有缺点,由于是静态的,一些动态的内容如评论、计数等等模块就需要借助外来平台,评论有“多说”,计数有“不蒜”!(多说已经关闭,不蒜子还活着)

“不蒜子”与百度统计谷歌分析等有区别:“不蒜子”可直接将访问次数显示在您在网页上(也可不显示);对于已经上线一段时间的网站,“不蒜子”允许您初始化首次数据。。

普通用户只需两步走:一行脚本+一行标签,搞定一切。追求极致的用户可以进行任意DIY。

不蒜子官网:http://busuanzi.ibruce.info/

一、安装脚本(必选)


要使用不蒜子必须在页面中引入busuanzi.js,目前最新版如下。

<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>

不蒜子可以给任何类型的个人站点使用,如果你是用的hexo,打开themes/你的主题/layout/_partial/footer.ejs添加上述脚本即可,当然你也可以添加到 header 中。

二、安装标签(可选)


只需要复制相应的html标签到你的网站要显示访问量的位置即可。您可以随意更改不蒜子标签为自己喜欢的显示效果,内容参考第三部分扩展开发。根据你要显示内容的不同,这分几种情况。

1、显示站点总访问量

要显示站点总访问量,复制以下代码添加到你需要显示的位置。有两种算法可选:

算法a:pv的方式,单个用户连续点击n篇文章,记录n次访问量。

本站总访问量<span id="busuanzi_value_site_pv"></span>

算法b:uv的方式,单个用户连续点击n篇文章,只记录1次访客数。

本站访客数<span id="busuanzi_value_site_uv"></span>人次

如果你是用的hexo,打开themes/你的主题/layout/_partial/footer.ejs添加即可。

实例效果参考:

https://blog.ccswust.org/busuanzi/

2、显示单页面访问量

要显示每篇文章的访问量,复制以下代码添加到你需要显示的位置。

算法:pv的方式,单个用户点击1篇文章,本篇文章记录1次阅读量。

本站总访问量<span id="busuanzi_value_site_pv"></span>次

代码中文字是可以修改的,只要保留id正确即可。

注意:不蒜子为保持极简,暂不支持在站点文章摘要列表中(如首页)逐个显示每篇文章的阅读次数,如果您非常需要这一功能,可以留言。根据需要程度再考虑开发相应的功能。

实例效果参考:

https://blog.ccswust.org/busuanzi/pv.html

注意:不蒜子为保持极简,暂不支持在站点文章摘要列表中(如首页)逐个显示每篇文章的阅读次数,如果您非常需要这一功能,可以留言。根据需要程度再考虑开发相应的功能。

3、显示站点总访问量和单页面访问量

本站访客数<span id="busuanzi_value_site_uv"></span>人次

实例效果参考:

https://blog.ccswust.org/busuanzi/ip.html

4、只计数不显示

只安装脚本代码,不安装标签代码。

至此,不蒜子已经可以正常运行,如果你还要自定义一些内容或有疑问,请继续阅读。

附录:扩展开发(自定义)


不蒜子之所以称为极客的算子,正是因为不蒜子自身只提供标签+数字,至于显示的style和css动画效果,任你发挥。

  • busuanzi_value_site_pv 的作用是异步回填访问数,这个id一定要正确。
  • busuanzi_container_site_pv的作用是为防止计数服务访问出错或超时(3秒)的情况下,使整个标签自动隐藏显示,带来更好的体验。这个id可以省略。

因此,你也可以使用极简模式:

本站总访问量<span id="busuanzi_value_site_p

或者个性化一下:

Total <span id=”busuanzi_value_site_pv”></span> views.您是xxx的第<span id=”busuanzi_value_site_uv”></span>个小伙伴<span id=”busuanzi_value_page_pv”></span> Hits

1、我只要统计不显示?
只引入busuanzi.js,不引入显示标签即可。

2、你的标签太丑了,我想美化一下可以么?
可以的,您可以用自己站点的css进行控制,只要内层span的id正确以便回填访问次数即可,甚至标签都可以不是span。

3、中文字体太丑了,我的主题不适合?
您可以将本站总访问量xxx次改成view xxx times等英文以获得更和谐的显示效果。

4、在访问量数据未取回来之前,我不想让页面显示为诸如“本站总访问量 次”,显得太low,怎么办?
只需要如下css,不蒜子执行完毕会自动将标签显示出来,其他以此类推:

<span id="busuanzi_container_site_pv" style='display:none'> 
本站总访问量<span id="busuanzi_value_site_pv"></span></span>

上面的做法还是很low?!看下这个https://blog.ccswust.org/busuanzi/diy.html
右键看下源码,没加载出来前就显示个菊花转转转:
首先,你要引入font-awesome字体:

<link rel=”stylesheet” href=”//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css”>或<link rel=”stylesheet” href=”//cdn.bootcss.com/font-awesome/4.3.0/css/font-awesome.min.css”>

其次,修改不蒜子标签:

<span id="busuanzi_value_page_pv">
<i class="fa fa-spinner"></i></span> Hits或(旋转效果)<span id="busuanzi_value_page_pv">
<i class="fa fa-spinner fa-spin"></i></span> Hits

和谐多了!

5、我的网站已经运行一段时间了,想初始化访问次数怎么办?请先注册登录,自行修改阅读次数。有任何其他问题或疑问可以留言。

转载于:https://blog.ccswust.org/15902.html