我正在尝试制作像
这样的东西function config( $string ){
require 'configuration.php';
return $config[$string];
}
但是当我的配置有一个2D数组时我遇到了问题。像:
$config['features'] = array(
'memcached' => TRUE,
'compress' => TRUE,
'gzip' => TRUE
);
我如何获得config('features/memcached')
或者我们是否可以使用三个或更多线程数组(如config('features/memcached/version14/etc')
(示例)来返回true
,但在我们执行config('features')
之类的操作时仍然有效像上面的函数一样返回数组。任何想法?
答案 0 :(得分:1)
你可以尝试这个(从头开始编写,未经测试):
function config( $key, $subkey = null ){
require 'configuration.php';
return ($subkey)? $config[$key][$subkey] : $config[$key];
}
将其用作config('features','memcached')
,并注意这只适用于一个级别的子阵列。如果可能有更多或者你想坚持config('features/memcached')
- 语法,你可以尝试这样的东西(与上面的函数相同 - 这没有经过测试,也许你必须修复一个bug你自己的;)):
function config( $string ){
require 'configuration.php';
$keys = explode('/',$string);
foreach($keys as $key){
$config = $config[$key];
}
return $config;
}
答案 1 :(得分:1)
将字符串拆分为键:
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 ) )
);
答案 2 :(得分:1)
您可以使用该方法:
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
,依此类推。
答案 3 :(得分:1)
function config( $string ){
require 'configuration.php';
$p = explode("/",$string);
$r = $config;
foreach($p as $param)
$r = $r[$param];
return $r;
}