我有一个配置数组:
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'
)
);
不起作用。
我想你在找
$retArray = return array(
'admin_url' => 'admin',
'routes' => array();
);
$retArray['routes']['link1'] = $retArray['admin_url'].'/link1';
$retArray['routes']['link2'] = $retArray['admin_url'].'/link2';
return $retArray;
它不是"动态的"。如果你构建了一个类,你可能会"动态"地做你想做的事情。
正如Jon和其他人所说,不可能访问数组声明中的值。
我不知道你需要在什么上下文中实现这一点,但如果你真的需要重新配置你的数组,我会用这样的函数来封装它(仅适用于PHP>=5.3):
函数set_config_routes(数组$array){$return=数组('admin_url'=>$array['admin_url']);array_walk_recurive($array,function($val,$key)use(&$return){如果(substr($key,0,4)=="链接"){$return['routes'][$key]=$return['admin_url']$val;}});return$return;}
然后这样称呼它:
$config=set_config_routes($config);
正如Mike W和其他人所说,您确实应该考虑使用类和对象来进行更有效的实践。
不,你不能这样做:
$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;
不,不是。您必须在数组声明之外获取admin_url
的值才能引用它,或者在单独的步骤中添加引用它的元素。