androidapachebackendcentoscommandcomposercrontabcurldesigndevelopdockerelasticfinancingfirewallfrontendgatewaygitgolanghybridiisiptablesjavajenkinskuberneteslaravelluamacmemcachemigrationmongodbmysqlnginxnodejsofficeopenrestyopensslperformancephpproductionredisregexprestfulsecurityshellsnippetsshstartupteamtraintravelunitvmwarevsftpwindowsworkwwwyaf

Snippet

各种代码片段

PHP

三元运算符

(expr1) ? (expr2) : (expr3)
在 expr1 求值为 TRUE 时的值为 expr2,否则为 expr3

(expr1) ?: (expr3)
简写 ?: 等同于 !empty(expr1) ? expr1 : expr3

(expr1) ?? (expr3)
简写 ?? 等同于 isset(expr1) ? expr1 : expr3

PHP 中关于 Integer 整型

PHP_INT_SIZE:表示整数 integer 值的字长
PHP_INT_MIN:表示整数 integer 值的最小值
PHP_INT_MAX:表示整数 integer 值的最大值

今天/明天/昨天的时间

strtotime('today')
strtotime('tomorrow')
strtotime('yesterday')

30 天前的时间

strtotime('-30 days')

一周后的时间

strtotime('+1 week')

3个月后的时间

strtotime('+3 month')

使用修正短语来获得准确时间

strtotime('last day of 20181031 + 1 month')

本月第一天 和 最后一天

strtotime('first day of this month')
strtotime('last day of this month')

上个月的时间

strtotime('last month')

上个月第一天 和 最后一天

strtotime('first day of last month')
strtotime('last day of last month')

本周一 和 本周日

strtotime('last Monday')
strtotime('Sunday')

上周开始时间

strtotime('Monday last week')

上周结束时间

strtotime('Sunday last week')

上周三开始时间

strtotime('Monday last week +2 day')

昨天最后一秒

strtotime('today -1 second')

一前年的时间

strtotime('last year')

上月16到下月15

$month = $month ?: DateTime::lastMonth('first', 'Ym');
$begin = (int) strtotime( $month . '16' );
$final = (int) strtotime( $month . DateTime::getDays( $month ) . ' +15 day' );

将数组格式成表格显示

$tbody = array_reduce($res, function($a, $b){return $a.="<tr><td>".implode("</td><td>",$b)."</td></tr>";});

$thead = "<tr><th>" . implode("</th><th>", array_keys($res[0])) . "</th></tr>";

echo '<table class="table table-striped">'. $thead . $tbody .'</table>';

数组值全部转数字

$count = array_map( function( $ele ){ return $ele + 0; }, $count );

修正 64位系统 JSON_BIGINT_AS_STRING 无效的问题

/**
 * 修正 64位系统 JSON_BIGINT_AS_STRING 无效的问题
 * https://github.com/firebase/php-jwt/blob/master/src/JWT.php
 * 32bit int_max 2147483647
 * 64bit int_max 9223372036854775807
 */
if (PHP_INT_SIZE == 8) {
    $max = strlen((string) PHP_INT_MAX) - 1;
    $txt = preg_replace('/:\s*(-?\d{' . $max . ',})/', ': "$1"', $txt);
    $ret = json_decode($txt, TRUE);
} else {
    $ret = json_decode($txt, TRUE, 512, JSON_BIGINT_AS_STRING);
}

随机分配并验证组合是否重复

function generate( $taobao_uid, $field ){

    do {

        //随机出一个渠道PID
        $adzone = $this->getAdzone( $taobao_uid );

        //随机分配渠道关系ID
        $beian = $this->getBeian( $taobao_uid );

        //检查是否存在 PID + relation_id 组合
        $count = $this->getCount( $beian['relation_id'], $adzone['adzone_id'] );

    //存在此组合,重新生成
    } while ( $count > 0 );

    ////////////////////////////

    $field['taobao_uid']    = $taobao_uid;
    $field['relation_id']   = $beian['relation_id'];
    $field['promote_id']    = $adzone['promote_id'];
    $field['adzone_id']     = $adzone['adzone_id'];

    $field['created_time']  = time();
    $field['created_date']  = date('Ymd');
    $field['ip']            = Request::getIP();

    // 写入关联表
    $ret = $this->db->insert('pre_member_relation', $field);

    return $ret;

}

搜索关键词高亮显示

//先找到标签内文本
$matche = StrExt::match( $html, '/>(?<=>)([^<\r\n{]+)(?=<)</', 0, TRUE );

//再进行逐一替换
foreach( $matches as $mat ){
    $html = str_replace( $mat, preg_replace( '/'. addcslashes( $query, '.*' ) .'/i', '<span class="bright">$0</span>', $mat ), $html );
}

HTML

JavaScript

修正 JSON.parse 不支持 int64 的问题

body.replace(/:([0-9]{15,}),/g, ':"$1",');

随机指定长度字符

Math.random().toString(36).substr(2);

将大金额格式为:XX万元

Hybrid.App.format = function( num ){
    return num / 10000 + '万元';
}

将整个表单变成只读

<fieldset disabled="disabled">
    <form>
    ...
    </form>
</fieldset>

CSS

带阴影的浮动条

width: 100%;
height: auto;
background-color: #fff;
position: fixed;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);

文字下方颜色条

margin: 1.5rem 0;
font-size: 1.8rem;
padding-left: 10px;
padding-right: 10px;
display: inline-block;
box-shadow: inset 0 -8px 0 #b0d3ff;

文字颜色渐变

background: linear-gradient(to right,#ff8a00,#e52e71);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-webkit-box-decoration-break: clone;
font-weight: 700;