我正在尝试做一些像这样的东西
function config( $string ){
require 'configuration.php';
return $config[$string];
}但是当我的配置有一个二维数组时,我遇到了一个问题。像这样:
$config['features'] = array(
'memcached' => TRUE,
'compress' => TRUE,
'gzip' => TRUE
);我如何获取config('features/memcached'),或者我们是否可以有三个或更多像config('features/memcached/version14/etc') (示例)这样的线程数组来返回true,但当我们像上面的函数一样返回数组时,config('features')仍然有效。有什么想法吗?
发布于 2011-02-19 02:10:20
只需将字符串拆分为键:
function config( $string ){
require 'configuration.php';
$keys = explode('/',$string);
$return = $config;
foreach($keys as $key){
$return = $return[$key];
}
return $return;
}在这里你也可以这样做:
config('features/others/foo/bar');如果它存在:
$config['features'] = array(
'memcached' => TRUE,
'others' => array( 'foo' => array( 'bar' => 42 ) )
);发布于 2011-02-19 02:07:04
您可以尝试这样(从head编写,而不是测试):
function config( $key, $subkey = null ){
require 'configuration.php';
return ($subkey)? $config[$key][$subkey] : $config[$key];
}将其用作config('features','memcached'),请注意,这只适用于一个级别的子数组。如果还有更多,或者如果你想坚持使用config('features/memcached')-syntax,你可以尝试这样的方法(与上面的函数相同-这没有经过测试,也许你必须自己修复一个bug ; ):
function config( $string ){
require 'configuration.php';
$keys = explode('/',$string);
foreach($keys as $key){
$config = $config[$key];
}
return $config;
}发布于 2011-02-19 02:11:22
你可以使用这个方法:
public function config($path = null, $separator = '.')
{
if (!$path) {
return self::$_constants;
}
$keys = explode($separator, $path);
require 'configuration.php';
$value = $config;
foreach ($keys as $key) {
if (!isset($value[$key])) {
throw new Exception("Value for path $path doesn't exists or it's null");
}
$value = $value[$key];
}
return $value;
}在您的示例中,调用config('features')将返回数组,而config('features.compres')将返回true,依此类推。
https://stackoverflow.com/questions/5044869
复制相似问题