0

有了这个:

//Example array
$arr = array(
'db' => array('host' => 'local', 'user' => 'root'));


    public function getParam($name, $default = null)
        {
            if (array_key_exists($name, $this->params)) {
                return $this->params[$name];
            }

            return $default;
        }

我可以获得整个 db 数组,但是如果我只想使用 getParam 方法()到达“主机”怎么办,我需要如何扩展 getParam 方法才能使其灵活并在每个不相关的数组深度下工作?

4

1 回答 1

0

不确定是否有更好的解决方案,但我可能会做一个递归解决方案。像这样的东西:

public function getParam($name, $default = null, $arrayToCheck = false)
{
    if (!$arrayToCheck) 
        $arrayToCheck = $this->params;

    if (array_key_exists($name, $arrayToCheck)) {
        return $arrayToCheck[$name];
    }

    // if we get here, we haven't found it
    foreach($arrayToCheck as $arrayItem)
    {
        if (is_array($arrayItem))
        {
            return $this->getParam($name, $default, $arrayItem);
        }
    }


    return $default;
}

这将递归地在您的数组中搜索您的键并返回匹配的第一个值。

于 2013-05-26T22:58:24.630 回答