PHP二维数据排序,二维数据模糊查询

Wesley13
• 阅读 262

一、因为项目中的一个报表需要合并三个表的数据,所以分表查询再合并数据,利用PHP数组函数进行排序,搜索。三表合并后的数组结构如下:

Array
(
    [0] => Array
        (
            [history_id] => 12
            [sla_group_id] => 1
            [sla_id] => -1
            [create_time] => 1513057695
            [tasklog_id] => 12
            [tasklog_time] => 2017-12-12 13:48:15
            [tasklog_name] => window_2008
            [tasklog_type] => 分组立即调度
            [tasklog_user] => admin
            [tasklog_status] => 3
        )

    [1] => Array
        (
            [history_id] => 11
            [sla_group_id] => 1
            [sla_id] => 1
            [create_time] => 1513057563
            [tasklog_id] => 11
            [tasklog_time] => 2017-12-12 13:46:03
            [tasklog_name] => centos7_USHARK
            [tasklog_type] => 一小时备份频率
            [tasklog_user] => 系统自动
            [tasklog_status] => 3
        )

    [2] => Array
        (
            [history_id] => 19
            [sla_group_id] => 1
            [sla_id] => 98
            [create_time] => 1513059714
            [tasklog_id] => 19
            [tasklog_time] => 2017-12-12 14:21:54
            [tasklog_name] => huawei_fusion_backup
            [tasklog_type] => 华为虚拟化备份
            [tasklog_user] => ushark.net
            [tasklog_status] => 2
        )

    [3] => Array
        (
            [history_id] => 41
            [sla_group_id] => 0
            [sla_id] => -1
            [create_time] => 1513069534
            [status] => 2
            [tasklog_id] => 41
            [tasklog_time] => 2017-12-12 17:05:34
            [tasklog_name] => centos7-11自增非整数测试
            [tasklog_user] => admin
            [tasklog_type] => 立即调度
            [tasklog_status] => 2
        )

    [4] => Array
        (
            [history_id] => 40
            [sla_group_id] => 0
            [sla_id] => -1
            [create_time] => 1513067574
            [status] => 2
            [tasklog_id] => 40
            [tasklog_time] => 2017-12-12 16:32:54
            [tasklog_name] => win2008安装MySQL
            [tasklog_user] => impp.cc
            [tasklog_type] => 策略备份
            [tasklog_status] => 2
        )

    [5] => Array
        (
            [history_id] => 39
            [sla_group_id] => 0
            [sla_id] => -1
            [create_time] => 1513067399
            [status] => 2
            [tasklog_id] => 39
            [tasklog_time] => 2017-12-12 16:29:59
            [tasklog_name] => Linux下文件
            [tasklog_user] => ppstorm.com
            [tasklog_type] => 立即调度
            [tasklog_status] => 2
        )
)

二、二维数组排序、搜索

// HTTP GET values
$length  = (int) $this->input->get('length', true);
$start   = (int) $this->input->get('start', true);
$order   = trim($this->input->get('order', true));
$sort    = trim($this->input->get('dir', true));
$search  = trim($this->input->get('search', true));

// 三表数据
$vm_group = $this->safe->vm_group_task();
$vm_tasklog = $this->safe->vm_tasklog();
$vm_mounts_log = $this->safe->vm_mounts_log();

// 合并数据
$tasklog = array_merge($vm_group, $vm_tasklog, $vm_mounts_log);

// !!! 二维数据搜索 !!!
if (!empty($search)) {
    foreach ($tasklog as $sk => $sv) {
        if (mb_stripos($sv['tasklog_name'], $search) === false
            && mb_stripos($sv['tasklog_type'], $search) === false
            && mb_stripos($sv['tasklog_user'], $search) === false
        ) {
            unset($tasklog[$sk]);
            continue;
        }
    }
}

// 总记录
$total_record = count($tasklog);

// 排序
switch ($order) {
    case 1:
        $sort_key = 'tasklog_name';
        break;
    case 2:
        $sort_key = 'tasklog_type';
        break;
    case 3:
        $sort_key = 'tasklog_user';
        break;
    case 4:
        $sort_key = 'tasklog_time';
        break;
    case 5:
        $sort_key = 'tasklog_status';
        break;
    default:
        $sort_key = 'tasklog_id';
        break;
}
$sort_arr = array_column($tasklog, $sort_key);
$desc_asc = $sort === 'desc' ? SORT_DESC : SORT_ASC;
array_multisort($sort_arr, $desc_asc, $tasklog); // !!! 二维数据排序 !!!

// 取指定长度
$output_arr = array_slice($tasklog, $start, $length);
点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。 1、使用解构获取json数据let jsonData   id: 1, status: "OK", data: ['a', 'b'] ; let  id, status, data: number   jsonData; console.log(id, status, number )
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
Wesley13 Wesley13
1年前
030 SSM综合练习06
**1.权限操作涉及的三张表** (1)用户表信息描述users ![](https://oscimg.oschina.net/oscnet/a4a2b1f943cbc2db1c8ddd613e7ed00a9ae.png) sql语句: CREATE TABLE users ( id VARCHAR2 ( 32 ) DEFAU
Wesley13 Wesley13
1年前
cobol学习之十数据库的增删改查模板
这次连接数据库使用的是ODBC连接access数据库,里面主要是一个增删改查的模板备份,方便以后查询。 000001 IDENTIFICATION DIVISION. 000002 PROGRAM-ID. SAMPLEDB2. 00
Wesley13 Wesley13
1年前
PHP创建多级树型结构
<!-- lang: php --> <?php $area = array( array('id'=>1,'pid'=>0,'name'=>'中国') ,array('id'=>5,'pid'=>0,'name'=>'美国') ,array('id'=>2,'pid'=>1,'name'=>'吉林') ,array('id'=>4,'pid'=>2,'n
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序 select * from table_name order id desc; 2.按照指定(多个)字段排序 select * from table_name order id desc,status desc; 3.按照指定字段和规则排序 selec
Wesley13 Wesley13
1年前
oracle:ORA
报ORA-25153,这一定是临时表空间逻辑名还在,但是找不到临时文件的原因。 解决方法: 1、查询临时表空间状态状态 select tablespace\_name,status from dba\_tablespaces; TABLESPACE\_NAME STATUS \--------- SYSTEM ONL
Wesley13 Wesley13
1年前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数`NOW()`相同的格式返回日期和时间? 我知道如何使用`date()`做到这一点,但是我问是否有一个仅用于此的函数。 例如,返回: 2009-12-01 00:00:00 * * * ### #1楼 使用此功能: function getDatetimeNow() {
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
Easter79 Easter79
1年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用 0x00 SQL注入 ---------- 反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下 1)表名 payload:select \* from \`users\` where user\_id=1 limit 0,1; ![](https://o
helloworld_34035044 helloworld_34035044
4个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。 uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid() 或 uuid(sep)参数说明:sep 布尔值,生成的uuid中是否包含分隔符'',缺省为