我有一个数组来存储像这样的配置
$config = array (
'db' => array(
'db1' => array(
'dbname' => 'mydatabase',
'user' => 'myusername',
'pass' => 'mypassword',
'host' => 'myhost'
)
),
'url' => array(
'homeUrl' => 'http://www.example.com'
)
)
我正在编写一个函数,通过传入像db.db1.dbname
这样的字符串来检索数组中的数据,它假设给我'mydatabase'
我试图将字符串分解为数组以获取密钥db, db1, and dbname
。但在那之后,我有点坚持我应该像$config -> db -> db1 -> dbname
或$config['db']['db1']['dbname']
一样使用它们来获得'mydatabase'
。
理想情况下,假设我有一个名为read($arg, $array)
的函数,我想检索这样的结果
read('db.db1.dbname', $config), returns 'mydatabase'
read('url.homeUrl', $config), returns 'http://www.example.com'
由于我不知道字符串中包含多少个键,因此我需要更加动态。 提前致谢
答案 0 :(得分:5)
我认为你正在考虑JSON
尝试$config['db']['db1']['dbname'];
答案 1 :(得分:4)
我真的想知道你为什么要这样做,但在这里:
function read($item, $config)
{
$selectors = explode('.', $item);
$configItem = $config;
foreach($selectors as $selector) {
$configItem = $configItem[$selector];
}
return $configItem;
}
$config = array (
'db' => array(
'db1' => array(
'dbname' => 'mydatabase',
'user' => 'myusername',
'pass' => 'mypassword',
'host' => 'myhost',
),
),
'url' => array(
'homeUrl' => 'http://www.example.com',
),
);
read('db.db1.dbname', $config); // will return mydatabase
请注意,您必须检查密钥是否存在并抛出错误或异常,如果情况并非如此。
而不是使用该功能有一个原因,你不能这样做:
function functionThatNeedsDatabaseInfo($databaseInfo)
{
// do database stuff
}
functionThatNeedsDatabaseInfo($config['db']['db1']);
答案 2 :(得分:1)
它们只是普通的嵌套数组。
$config['db']
将为您提供第一个内部数组
$config['db']['db1']
将为您提供您正在寻找的所有数据库配置。
$config['db']['db1']['dbname']
:'dbname'是'db1'数组中的索引,它将为您提供所需的值。
答案 3 :(得分:0)
function read($layers, $arr){
$toReturn = $arr;
foreach(split('.', $layers) as $layer)
$toReturn = $toReturn[$layer];
return $toReturn;
}
你为什么要这样做,我不是最模糊的。但是你去了。
答案 4 :(得分:-1)
将该东西投射到对象!或者更确切地说,将每个数组作为对象进行转换,然后就可以像使用它一样使用它。
$config = (object) array (
(object) 'db' => array(
(object) 'db1' => array(
'dbname' => 'mydatabase',
'user' => 'myusername',
'pass' => 'mypassword',
'host' => 'myhost'
)
),
(object) 'url' => array(
'homeUrl' => 'http://www.example.com'
)
)