大小写的坑

mysql5.7 查询不区分大小写。

php7.2 array_diff() 区分大小写,在不区分大小写的情况下取差集,应使用 array_udiff() 和 strcasecmp() 处理

示例:array_udiff([‘a’, ‘b’, ‘c’], [‘A’, ‘b’], ‘strcasecmp’) // 输出 c

1
2
3
4
5
6
7
8
// 使用回调函数比较数据,计算数组的不同之处。和 array_diff() 不同的是,前者使用内置函数进行数据比较。
array_udiff ( array $array1 , array $array2 [, array $... ], callable $value_compare_func ) : array

// 二进制安全比较字符串(不区分大小写)
strcasecmp ( string $str1 , string $str2 ) : int

// 二进制安全比较字符串(区分大小写)
strcmp ( string $str1 , string $str2 ) : int

json_encode函数输出数字为int型方案

1
2
3
4
5
$data = array('213','dasd','大声道',123);
var_dump(json_encode($data, JSON_NUMERIC_CHECK));

//输出结果:这里数字即全部为int类型
string(37) "[123,"dasd","\u5927\u58f0\u9053",123]"

json_encode函数输出中文不转为unicode编码方案

1
$json = json_encode(arr, JSON_UNESCAPED_UNICODE);

Carbon

Carbon 是 PHP 知名的日期和时间操作扩展,Laravel 框架中使用此扩展来处理时间、日期相关的操作。在 Laravel 中,时间戳 created_at 和 updated_at 作为模型属性被调用时,都会自动转换为 Carbon 对象。

carbon 的 subMonth 和 addMonth 会有月溢出问题,而使用 subMonthNoOverflow 和 addMonthNoOverflow 就不会出现月溢出问题,如下图所示:

月溢出问题

1
2
3
4
5
6
7
8
// strtotime() 也会出现月溢出问题
$t = strtotime('2020-10-30');
$a = date('Y-m-d', strtotime('-1 month', $t));
echo $a . "\n"; // 输出2020-10-01
echo date('Y-m', strtotime(date('Y-m-01') . ' -1 month')) . "\n"; // 因为每月都有1号,如果需要获取上一个月的月份,可以使用以下的方式获取:

// 根据提供的时间参数做处理
Carbon::parse($this->argument('the_date'))->toDateString();

取差集

mysql查询不区分大小写, php array_diff() 区分大小写,在不区分大小写的情况下取差集,应使用 array_udiff 和 strcasecmp 处理

1
array_udiff($arr2, $arr2, 'strcasecmp')

php-fpm

当 php-fpm 设置了最大运行进程数为 256,如果某些请求卡住了,就会导致 php-fpm 进程堆积了。