zilan
V2EX  ›  PHP

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

  •  
  •   zilan · Nov 2, 2018 · 2973 views
    This topic created in 2754 days ago, the information mentioned may be changed or developed.

    避免使用 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  
       Nov 2, 2018
    func_get_args()、func_get_arg()与 func_num_args(),研究下这几个函数就可以了
    zilan
        2
    zilan  
    OP
       Nov 2, 2018
    @echodone 考虑过,关键是调用而不是被调用
    suit
        3
    suit  
       Nov 2, 2018
    $redis->sUnion(...$keys);
    call_user_func_array([$redis, 'sUnion'], $keys);
    zilan
        4
    zilan  
    OP
       Nov 2, 2018
    @suit 感谢,忘记了
    下沉了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1125 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:19 · PVG 02:19 · LAX 11:19 · JFK 14:19
    ♥ Do have faith in what you're doing.