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

2018-11-02 10:09:20 +08:00
 zilan

避免使用 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;
    }
2500 次点击
所在节点    PHP
4 条回复
echodone
2018-11-02 10:17:47 +08:00
func_get_args()、func_get_arg()与 func_num_args(),研究下这几个函数就可以了
zilan
2018-11-02 10:28:56 +08:00
@echodone 考虑过,关键是调用而不是被调用
suit
2018-11-02 10:57:10 +08:00
$redis->sUnion(...$keys);
call_user_func_array([$redis, 'sUnion'], $keys);
zilan
2018-11-02 14:04:27 +08:00
@suit 感谢,忘记了
下沉了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/503668

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX