V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zilan
V2EX  ›  PHP

如何支持任意多个参数传入调用 Redis 的 sUnion ( PHP )?

  •  
  •   zilan · 2018-11-02 10:09:20 +08:00 · 2373 次点击
    这是一个创建于 1973 天前的主题,其中的信息可能已经有所发展或是发生改变。

    避免使用 eval,或者迭代地调用 2 个

    效果大概像这样:

        function unionSets($redis, $keys)
        {
            if (!is_array($keys)) {
                return [];
            }
            $count = count($keys);
            $ret = [];
            switch ($count)
            {
                case 2:
                    $ret = $redis->sUnion($keys[0], $keys[1]);
                    break;
                case 3:
                    $ret = $redis->sUnion($keys[0], $keys[1], $keys[2]);
                    break;
                case 4:
                    $ret = $redis->sUnion($keys[0], $keys[1], $keys[2], $keys[3]);
                    break;
                case 5:
                    $ret = $redis->sUnion($keys[0], $keys[1], $keys[2], $keys[3], $keys[4]);
                    break;
                case 6:
                    $ret = $redis->sUnion($keys[0], $keys[1], $keys[2], $keys[3], $keys[4], $keys[5]);
                    break;
                case 7:
                    $ret = $redis->sUnion($keys[0], $keys[1], $keys[2], $keys[3], $keys[4], $keys[5], $keys[6]);
                    break;
                case 8:
                    $ret = $redis->sUnion($keys[0], $keys[1], $keys[2], $keys[3], $keys[4], $keys[5], $keys[6], $keys[7]);
                    break;
                case 9:
                    $ret = $redis->sUnion($keys[0], $keys[1], $keys[2], $keys[3], $keys[4], $keys[5], $keys[6], $keys[8], $keys[8]);
                    break;
                default:
                    $ret = $redis->sUnion($keys[0], $keys[1]);
                    break;
            }
            return $ret;
        }
    
    echodone
        1
    echodone  
       2018-11-02 10:17:47 +08:00
    func_get_args()、func_get_arg()与 func_num_args(),研究下这几个函数就可以了
    zilan
        2
    zilan  
    OP
       2018-11-02 10:28:56 +08:00
    @echodone 考虑过,关键是调用而不是被调用
    suit
        3
    suit  
       2018-11-02 10:57:10 +08:00
    $redis->sUnion(...$keys);
    call_user_func_array([$redis, 'sUnion'], $keys);
    zilan
        4
    zilan  
    OP
       2018-11-02 14:04:27 +08:00
    @suit 感谢,忘记了
    下沉了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1032 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 22:31 · PVG 06:31 · LAX 15:31 · JFK 18:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.