PHP搜索条件构造

本文介绍了在项目中处理数据报表缓存时,面对多种搜索条件和大量选项,如何使用PHP自定义工具来枚举并构造搜索条件的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中需要将数据报表的结果缓存起来,搜索条件比较多,每个条件又有几十到几百个选项,需要一个工具对搜索条件进行枚举,自己动手写了一个。

    /**
     * @author murphy v2017/12/28
     * 不确定字段数目搜索条件枚举函数
     * 使用生成器进行迭代,防止一次性返回数组体积过大导致内存溢出
     * @param $params array ['keword1'=>['value1','value2'...],'keyword2'=>[]...]
     * @return Generator
     */
    function queryBuilder($params)
    {
        $set = [];//需要返回的参数组合
        $paramCount = [];//目标组合长度
        $setCount = 1;
        $paramNames = array_keys($params);
        foreach ($params AS $k => $v) {
            $paramCount[$k] = count($v);
            if (!empty($v)) {
                $setCount *= $paramCount[$k];
            }
        }

        while ($setCount > 0) {
            foreach ($paramNames AS $k => $paramName) {
                $set[$setCount][$paramName] = current($params[$paramName]);
                //如果数据为第一列或前一组数组的游标在末尾
                if ($k == 0 || key($params[$paramNames[$k - 1]]) == ($paramCount[$paramNames[$k - 1]] - 1)) {
                    if (key($params[$paramName]) == $paramCount[$paramName] - 1) {
                        reset($params[$paramName]);
                    } else {
                        next($params[$paramName]);
                    }
                }

            }

            yield $set[$setCount];

            $setCount--;

        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值