欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP二维数据排序及二维数据模糊查询详情

程序员文章站 2024-01-16 23:45:52
一、因为项目中的一个报表需要合并三个表的数据,所以分表查询再合并数据,利用PHP数组函数进行排序,搜索。三表合并后的数组结构如下: Array ( [0] => Arr...
一、因为项目中的一个报表需要合并三个表的数据,所以分表查询再合并数据,利用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);