🎉 💯 常用的系统方法如下:
<?php
$filter = [
'id' => ['con' => 'like'],
'phone_type',
'is_vip',
'renew',
'freeze',
'created_at' => ['con' => 'between time'],
];
$filter = [
'name' => ['con' => 'like', 'as' => 'cc'], // 注意 如果as的value值为 数字,则会变成0下标,具体请查阅 array_merge()方法
'page' => ['con' => 'hidden'],
'limit' => ['con' => 'hidden'],
'created_at' => ['con' => 'between time'],
'category',
];
$where = getListByWhere($filter);
if (!function_exists('getListByWhere')) {
/**
* 拼装where 条件
* @param $field
* @param array $search
* @return array
*/
function getListByWhere($field, $search = [], $isKey = true))
{
// $search = (!empty($search)) ? $search : empty(input()['search']) ? [] : input()['search'] ;
$search = (!empty($search)) ? $search : empty(input()) ? [] : input() ;
$where = [];
foreach ($field as $key => $value) {
// 如果是 = 条件(非特别,属常规)
if (!is_array($value)) $key = $value;
if (!isset($search[$key]) || $search[$key] == '') continue;
// 如果是 = 条件(非特别,属常规)
$con = (!is_array($value)) ? 'eq' : trim($value['con']) ;
if (empty($con)) continue;
switch ($con) {
case 'like':
$item = trim($search[$key]);
$item = "%{$item}%";
break;
case 'between time':
$item = trim($search[$key]);
$item = explode(' 到 ', $item);
if (empty($item) || count($item) != 2) $item = false;
$item[0] = strtotime($item[0] . ' 00:00:00');
$item[1] = strtotime($item[1] . ' 23:59:59');
break;
case 'hidden':
$item = false;
break;
default:
$item = trim($search[$key]);
break;
}
if ($item === false) continue;
$key_sql = empty($value['as']) ? $key : $value['as'];
if ($isKey) {
# thinkphp > 5.0 可以用
array_push($where, [$key_sql, $con, $item]);
// Array
// (
// [0] => Array
// (
// [0] => name
// [1] => like
// [2] => %1%
// )
// [1] => Array
// (
// [0] => category
// [1] => =
// [2] => 1
// )
// )
} else {
# thinkphp <= 5.0 可以用
$where = array_merge($where, [$key_sql => [$con, $item]]);
// Array
// (
// [name] => Array
// (
// [0] => like
// [1] => %1%
// )
// [category] => Array
// (
// [0] => =
// [1] => 1
// )
// )
}
}
return $where;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104