使用函数访问多维数组的元素

时间:2010-01-08 08:20:53

标签: php arrays function

我需要一个具有可变数量参数的函数来访问多维数组的元素。我这样做了($ this-> _config是数组)...

function item()
{
    if(func_num_args() != 0){
        $config = $this->_config;
        $args = func_get_args();
        foreach($args as $item){
            $config = $config[$item];
        }
        unset($args);
        return $config;
    }
    else throw new Exception('An item index is required.');
}

有没有办法做得更好?谢谢大家!

1 个答案:

答案 0 :(得分:1)

在你的问题中,你说你有一个多维数组,所以我认为它是这样的:

$config = array('foo' => array('bar' => array('baz' => 3)));

调用item('foo', 'bar', 'baz')将一直运行到最后一个数组并返回3.如果这是你想要的,你可以写$config['foo']['bar']['baz']或将你的配置放在ArrayObject并使用数组访问表示法或$config->foo->bar->baz(尽管所有嵌套数组也必须是ArrayObjects)。

如果你想保留这个功能,你应该在获取之前添加一些检查索引,因为PHP会引发关于未定义索引的注意事项。另外,为什么不使用InvalidArgumentException而不是Exception。适合这种情况更适合。

编辑:删除部分答案,因为它更像是大声思考

评论后编辑
Tbh,我发现通过这样的方法重新发明数组访问是一种相当尴尬的方法。在我看来,你应该在构造过程中将整个配置或子集传递给对象,并让它们通过常规数组访问器获取所需的任何内容。这将从您的configManager中decouple您的对象,并允许在以后更容易修改。