使用 usort()对一个二维数组中的某一个键值进行排序.文档

$arr = [
    [
        'name' => '小明',
        'age'  => 18,
        'sex'  => '男'
    ],
    [
        'name' => '小园',
        'age'  => 18,
        'sex'  => '男'
    ],
    [
        'name' => '小花',
        'age'  => 19,
        'sex'  => '男'
    ],
    [
        'name' => '婷婷',
        'age'  => 28,
        'sex'  => '女'
    ],
    [
        'name' => '嘻嘻',
        'age'  => 28,
        'sex'  => '男'
    ]
]

$new_arr = usort($arr,function($a,$b){
        if($a['age'] == $b['age']){
            return 0;
        }
        return ($a['age'] > $b['age']) ? 1 : -1;
});
# 依据返回值-1,0,1来对$arr升降序排序

重点是usort使用了什么排序算法呢?文档中有个例子提出这一疑问

$priorities = array(5, 8, 3, 7, 3);

usort($priorities, function($a, $b)
{
    if ($a == $b)
    {
        echo "a ($a) is same priority as b ($b), keeping the same\n";
        return 0;
    }
    else if ($a > $b)
    {
        echo "a ($a) is higher priority than b ($b), moving b down array\n";
        return -1;
    }
    else {
        echo "b ($b) is higher priority than a ($a), moving b up array\n";
        return 1;
    }
});

echo "Sorted priorities:\n";
var_dump($priorities);
?>

Output:

b (8) is higher priority than a (3), moving b up array
b (5) is higher priority than a (3), moving b up array
b (7) is higher priority than a (3), moving b up array
a (3) is same priority as b (3), keeping the same
a (8) is higher priority than b (3), moving b down array
b (8) is higher priority than a (7), moving b up array
b (8) is higher priority than a (5), moving b up array
b (8) is higher priority than a (3), moving b up array
a (5) is higher priority than b (3), moving b down array
a (7) is higher priority than b (5), moving b down array

Sorted priorities:
array(5) {
  [0]=> int(8)
  [1]=> int(7)
  [2]=> int(5)
  [3]=> int(3)
  [4]=> int(3)
}

好像是快速排序的方式。

好了该抛的"砖"也已经抛了,现在该把我们的"玉"引出来啦!

排序算法

先贴个参考链接!

以后补上心得!

一篇文章标题有时候会有空格存入数据库,在搜索的时候需要对空格进行过滤,
使用 mysqlTRIM()REPLACE()函数对字符串处理。

SELECT title FROM article WHERE TRIM(REPLACE(`title`,' ','')) = ?

首尾去空格可以在后端代码中存储过程实现.

多字段搜索 CONCAT

CONCAT(str1,str2,...)

返回由全体参数合并在一起而得到的字符串,只要有一个参数为NULL那就返回NULL

crontab命令小记

使用crontab命令时,最好填写绝对路径,命令和文件都最好写绝对路径.
否则很容易出现command not foundfile not found

man crontab

让我们来使用男人这个命令查看下crontab.呀!都是英文!不喜!

Options

每个用户拥有自己的crontab, 配置文件在/var下面.

  • -e 设置计时器
  • -l 列出当前计时器的设置
  • -r 删除计时器设置
  • -i 交互模式,删除计时器设置时要询问

* 表示任意时间, - 表示取值范围

* * * * * echo 'crontab test' >> /home/test/test.txt
* * * * * /bin/sh /home/test/test.sh
  • 第一列分钟, 每分钟用*或者*/1表示
  • 第二列小时, 1~23, 6则表示6小时,0表示0点
  • 第三列日期, 1~31, 同上
  • 第四列月份, 1~12, 同上
  • 第五列星期, 0~6, 0代表星期天

### 举些茄子 #

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
//表示每晚的21:30重启lighttpd.

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
//表示每月1、10、22日的4:45重启lighttpd.

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
//每天18 : 00至23 : 00之间每隔30分钟重启lighttpd.

0 * * * * /usr/local/etc/rc.d/lighttpd restart
//每一小时重启lighttpd

*/5 * * * *    #每五分钟执行
0 * * * *      #每小时执行
0 0 * * *      #每天执行
0 0 * * 0      #每周日执行

5 4 * * 6 /var/www/test.sh    #每周六凌晨4:05执行
0 4 * * 6 /var/www/test.sh    #每周六凌晨4:00执行
31 10-23/2 * * *   /var/www/test.sh    #在每天的10:31开始,每隔2小时重复一次

echarts自定义图形颜色

使用echarts图表自定义图表颜色(图形颜色),依据文档中找到series这个配置项中有一个属性itemStyle.链接

series: [
                {
                    name: '订单数',
                    type: 'bar',
                    //自定义图形颜色
                    itemStyle:{
                        normal:{
                            color:'#4ad2ff'
                        }
                    },
                    data: [
                        {{ $orders_4 }},
                        {{ $orders_3 }},
                        {{ $orders_2 }},
                        {{ $last_orders }},
                        {{ $orders_now }},
                    ]
                }
            ]

Laravel前端模板中渲染X轴注意不能直接赋值,需要加双引号"".

  xAxis: {
            data: [
                "{{ $month_4 }}",
                "{{ $month_3 }}",
                "{{ $month_2 }}",
                "{{ $month_1 }}",
                "{{ $current_month }}",
            ]
        },

Laravel提供的分页函数paginate无法与having一起使用会出现问题!在GitHub中可以找到关于此issue的讨论

having是对查出来的数据做筛选,paginate方法在获取总数(total)的时候无法对having查出来做统计。
会出现Column not found: 1054 Unknown column 'distance' in 'having clause'

目前想到解决办法只能原生分页的方式

  • 查询总条数
  • 计算每页多少条数据
  • 对查询使用limit分页
  • 返回对应数据

在解决这一问题中,使用过一个偏方,使用数组分页...

    /**
     * 数组分页
     * @param $arr
     * @param int $size
     * @param int $page
     * @return mixed
     */
    private function pageArray ($arr, $size = 10, $page = 1)
    {
        $new = array_chunk($arr, $size);

        return $new[$page - 1];
    }

不过这个由后端对数据处理分页数据量大了之后性能很不好,每次翻页都需要从DB中查询所有数据在使用
array_chunk()进行分组.不建议使用.