PHP func_get_args() 动态数组搜索

标签 php dynamic

如何使该代码更高效/动态,以便如果我需要传递更多参数,它是动态的?

因为现在有点困惑,我喜欢我的代码干净简单:)

protected function getSettings()
{
    $args = func_get_args();
    switch (func_num_args()) {
        case 1:
            $set =  (isset($this->settings[ $args[0] ]))
                    ? $this->settings[ $args[0] ]
                    : array();
            break;
        case 2:
            $set =  (isset($this->settings[ $args[0] ][ $args[1] ]))
                    ? $this->settings[ $args[0] ][ $args[1] ]
                    : array();
            break;
        case 3:
            $set =  (isset($this->settings[ $args[0] ][ $args[1] ][ $args[2] ]))
                    ? $this->settings[ $args[0] ][ $args[1] ][ $args[2] ]
                    : array();
            break;
        case 4:
            $set =  (isset($this->settings[ $args[0] ][ $args[1] ][ $args[2] ][ $args[3] ]))
                    ? $this->settings[ $args[0] ][ $args[1] ][ $args[2] ][ $args[3] ]
                    : array();
            break;
        case 5:
            $set =  (isset($this->settings[ $args[0] ][ $args[1] ][ $args[2] ][ $args[3] ][ $args[4] ]))
                    ? $this->settings[ $args[0] ][ $args[1] ][ $args[2] ][ $args[3] ][ $args[4] ]
                    : array();
            break;

        default:
            $set = $this->settings;
            break;
    }

    return $set;
}

最佳答案

未经测试,但方法有效

function f() {
    $ptr = $this->settings;
    foreach (func_get_args() as $arg) {
        if (!is_array($ptr) || !is_scalar($arg) || !isset($ptr[$arg])) {
            return array();
        }
        $ptr = $ptr[$arg];
    }
    return $ptr;
}

我对 is_scalaris_array 的测试将阻止您使用利用 ArrayAccessSplObjectStorage 和喜欢。我猜你不会。

关于PHP func_get_args() 动态数组搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18044249/

相关文章:

javascript - 在 Android 上让 HTML 链接始终提示“完成操作”

dynamic - 如何使 Meteor 订阅动态化?

php - 逻辑和物理 URL

python - 如何修改填充向量的 seq2seq 成本函数?

asp.net - 如何建立评论页面?

php - Yii2 Rest URL 路由

php - 在 php 中按下按钮时选择特定的 id

javascript - 从特定页面上的 <script> 加载一行

css - 防止动态 Shiny CSS 文件相互覆盖

php - 如何禁用 Zend_Form_Element_Radio 中的个别选项