我有一个配置数组:
return array(
'admin_url' => 'admin',
'routes' => array(
'link1' => 'admin/link1',
'link2' => 'admin/link2'
)
);
是否可以直接在'link1'中获取'admin_url'?类似的东西:
...
'routes' => array(
'link1' => someDynamicGet.'/link1',
...
尝试:
return $config = array(
'admin_url' => 'admin',
'routes' => array(
'link1' => $config['admin_url'].'/link1',
'link2' => $config['admin_url'].'/link2'
)
);
没用。
答案 0 :(得分:3)
我认为你正在寻找
$retArray = return array(
'admin_url' => 'admin',
'routes' => array();
);
$retArray['routes']['link1'] = $retArray['admin_url'].'/link1';
$retArray['routes']['link2'] = $retArray['admin_url'].'/link2';
return $retArray;
这不是'动态'。如果你建立了一个类,你可以“动态地”做你想做的事。
答案 1 :(得分:1)
不,你做不到这样的事情:
$array = array(0,1,2,$array[1]); //error!
但这个问题确实很有趣!您可以执行此操作:
$admin = 'admin';
$array = array('admin_url' => &$admin); //passing by referance
现在,当您更改变量$admin
时,它也会更改$ array!
$admin = 'Ziarno';
echo $array['admin_url']; //echoes 'Ziarno'!
但是,您无法将其连接到字符串:
$array2 = array(
'admin_url' => &$admin,
'routes' => array(
'link1' => &$admin . '/link1', //error!
'link2' => "$admin/link2" // will not change when the var $admin changes :(
)
);
所以最后,一个简单的解决方案是:
$admin = 'admin';
$array = array(
'admin_url' => $admin,
'routes' => array(
'link1' => "$admin/link1",
'link2' => "$admin/link2"
)
);
然而,当$ admin更改时,$ array值不会自动更改 但是如果你在函数中使用它作为返回值,我认为它应该可以正常工作。
return $array;
答案 2 :(得分:1)
如Jon和其他人所述,无法访问数组声明中的值。
我不知道你需要在什么上下文中实现这个目标,但是如果你真的需要重新配置你的数组,我会将它包装在类似这样的函数中(仅适用于PHP> = 5.3):
function set_config_routes(array $array) { $return = array('admin_url'=>$array['admin_url']); array_walk_recursive($array, function($val, $key) use (&$return) { if(substr($key,0,4)=='link'){ $return['routes'][$key] = $return['admin_url'].$val; } }); return $return; }
然后像这样称呼它:
$config = set_config_routes($config);
正如Mike W和其他人所说,你真的应该考虑使用类和对象来进行更有效的练习。
答案 3 :(得分:0)
不,不是。您必须在数组声明之外取值admin_url
才能引用它,或者在单独的步骤中添加引用它的元素。