使用类似路径的字符串访问多维数组

时间:2014-02-08 19:29:12

标签: php arrays multidimensional-array

我有一个名为get_config()的函数和一个名为$config的数组。

我使用get_config('site.name')调用该函数,并且正在寻找返回$config值的方法,因此对于此示例,该函数应返回$config['site']['name']

我差点把我的头发拉出来 - 试着不要使用eval()!有什么想法吗?

编辑:到目前为止,我有:

function get_config($item)
{
  global $config;

  $item_config = '';
  $item_path = ''; 

  foreach(explode('.', $item) as $item_part)
  {
    $item_path .= $item."][";

    $item = $config.{rtrim($item_path, "][")};
  }

  return $item;
}

3 个答案:

答案 0 :(得分:1)

这应该有效:

function get_config($config, $string) {
    $keys = explode('.', $string);
    $current = $config;
    foreach($keys as $key) {
        if(!is_array($current) || !array_key_exists($key, $current)) {
            throw new Exception('index ' . $string . ' was not found');
        }
        $current = $current[$key];
    }
    return $current;
}

答案 1 :(得分:0)

你可以试试像......

function get_config($item)
{
      global $config;
      return $config[{str_replace('.','][',$item)}];
}

答案 2 :(得分:0)

在get_config函数中,您可以使用php

中的explode函数解析字符串
function get_config($data){
 $pieces = explode(".", $data);

 return $config[$pieces[0]][$pieces[1]];

}