PHP 的 array_column 函数

语法

array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array

array_column() 返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。

分类至 PHP
0条评论

Git 中修改已提交的用户名/邮箱

1、执行一个 sh 文件

git filter-branch --env-filter '

OLD_EMAIL="旧邮箱"
CORRECT_NAME="新提交的名字"
CORRECT_EMAIL="新提交的邮箱"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

2、如果遇到权限问题则赋予权限,例如

Permission denied

#执行如下命令
chmod +x  XXXX.sh

3、如果遇到以下错误,修复它

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
 
#执行如下命令
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

4、最后提交(慎重)

git push origin --force --all

 

分类至 杂项
0条评论

nginx 中 fastcgi_params 和 fastcgi.conf 的区别

对比下 fastcgi.conf 与 fastcgi_params 文件,可以看出只有以下差异,即 fastcgi.conf 只比 fastcgi_params 多了一行:

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

 

原本只有 fastcgi_params 文件,fastcgi.conf是 nginx 0.8.30 才引入的。主要为是解决以下问题:原本 Nginx 只有 fastcgi_params,后来发现很多人在定义 SCRIPT_FILENAME 时使用了硬编码的方式。

例如:

fastcgi_param  SCRIPT_FILENAME  /var/www/foo$fastcgi_script_name;

于是为了规范用法便引入了 fastcgi.conf。

分类至 Linux
0条评论

git-flow 的工作流程

当在团队开发中使用版本控制系统时,商定一个统一的工作流程是至关重要的。Git 的确可以在各个方面做很多事情,然而,如果在你的团队中还没有能形成一个特定有效的工作流程,那么混乱就将是不可避免的。

基本上你可以定义一个完全适合你自己项目的工作流程,或者使用一个别人定义好的。

在这章节中我们将一起学习一个当前非常流行的工作流程 git-flow。

分类至 杂项
0条评论

Git中的AutoCRLF与SafeCRLF换行符问题

最近在使用GitHub,发现不时没有修改过的文件要提交,对比发现文件全部修改,但找不到不一样的地方。
想可能是换行符的问题,因为Windows和Linux的换行符不一样,而Git默认应该是Linux的,今天Bing了下,果然是这个问题。

CR回车 LF换行Windows/Dos CRLF \r\n
Linux/Unix LF \n
MacOS CR \r

 

分类至 杂项
0条评论

C2 A0 特殊空格

今天下班前往微信的文件传输助手发了一条消息,是SQL语句,如下:

CREATE TABLE `user` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
 `username` varchar(20) NOT NULL COMMENT '用户名',
 `password` char(40) NOT NULL COMMENT '登录密码',
 `api_token` varchar(128) NOT NULL DEFAULT '' COMMENT 'token',
 `created_at` int(10) unsigned NOT NULL COMMENT '创建时间',
 `updated_at` int(10) unsigned NOT NULL COMMENT '更新时间',
 PRIMARY KEY (`id`),
 UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'

晚上回到家,本想复制这条消息记录在家里的电脑创建数据表,却莫名其妙报错了...

分类至 杂项
1条评论

判断两个时间段是否重叠的算法

判断两个时间段是否重叠,如:

startdate1 — enddate1
startdate2 — enddate2

两个时间的重叠分4种情况,若你一一列出这四种情况来判断是否重叠那就弱爆了,最简单的方法:

startdate1 <= enddate2 and enddate1 >= startdate2

若你无法理解上面这种方法,那我还有下面的方法提供给你:

(startdate1 BETWEEN startdate2 AND enddate2)
or (enddate1 BETWEEN startdate2 AND enddate2)
or (startdate2 BETWEEN startdate1 AND enddate1)
or (enddate2 BETWEEN startdate1 AND enddate1)

分类至 杂项
0条评论

Laravel 框架查询数据集转换为数组

1. Eloquent 查询

在 Laravel 框架里,如果是 Eloquent 查询,可以用 toArray 方法的把结果转换为一维数组。

Eloquent 模型的 first 方法返回的是单个 Eloquent 对象,使用 toArray 方法可以把它转换成数组:

$user = User::where('id', 1)->first()->toArray();

Eloquent 模型的 get 方法返回的是包含多个 Eloquent 对象的 Collection 集合,使用 toArray 方法可以把集合转换成二维数组:

$users = User::whereIn('id', [1, 2, 3])->get()->toArray();

2. DB 查询

当我们使用 DB 类进行查询时,first 方法返回的是 stdClass 对象,get 方法返回的是包含多个 stdClass 对象的 Collection 集合。

// first 返回结果是 stdClass 对象
$user = DB::table('users')->where('id', 1)->frist();

// get 返回结果是包含多个 stdClass 对象的 Collection 集合
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();

stdClass 是 PHP 的标准对象,当然不能使用 toArray 方法转换成数组。而 Collection 的 toArray 方法代码实现如下:

// 摘自框架文件:vendor\laravel\framework\src\Illuminate\Support\Collection.php
public function toArray()
{
    return array_map(function ($value) {
        return $value instanceof Arrayable ? $value->toArray() : $value;
    }, $this->items);
}

它通过判断集合内元素是否实现了 Arrayable 接口,再调用元素自身的 toArray 方法转换成数组——刚好 Eloquent 实现了这个接口。而 stdClass 对象当然就没有这个方法,因此,DB 查询 get 方法返回的 Collection 集合,用 toArray 方法转换成数组时,仅能转换第一层,内部元素还是 stdClass 对象。

解决方法一:

// first 结果转换成一维数组
$user = DB::table('users')->where('id', 1)->frist();
$user = (array)$user;

// get 结果转换成二维数组
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
$users = $users->map(function ($value) { return (array)$value; })->toArray();

解决方法二:

// first 结果转换成一维数组
$user = DB::table('users')->where('id', 1)->frist();
$user = json_decode(json_encode($user), true);

// get 结果转换为成二维数组
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
$users = json_decode(json_encode($users), true);

 

分类至 PHP
0条评论