如何使该代码更高效/动态,以便如果我需要传递更多参数,它是动态的?
因为现在有点困惑,我喜欢我的代码干净简单:)
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_scalar
和 is_array
的测试将阻止您使用利用 ArrayAccess
、SplObjectStorage
和喜欢。我猜你不会。
关于PHP func_get_args() 动态数组搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18044249/