方法封装

2021/3/8 Code

🎉 💯 常用的系统方法如下:

<?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