0

我有一系列配置:

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'
     )
);

不工作。

4

4 回答 4

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;

这不是“动态的”。如果你建立一个类,你可能会“动态地”做你想做的事。

于 2013-07-07T21:46:38.610 回答
1

正如 Jon 和其他人所说,无法访问数组声明中的值。

我不知道你需要在什么上下文中实现这一点,但如果你真的需要重新配置你的数组,我会将它包装在一个类似这样的函数中(仅适用于 PHP >=5.3):

函数 set_config_routes(array $array) {
   $return = array('admin_url'=>$array['admin_url']);
      array_walk_recursive($array, function($val, $key) 使用 (&$return) {
         if(substr($key,0,4)=='链接'){          
            $return['routes'][$key] = $return['admin_url'].$val;
         }
      });
   返回 $return;
}

然后这样称呼它:

$config = set_config_routes($config);

正如 Mike W 和其他人所说的那样,您确实应该考虑使用类和对象来进行更有效的练习。

于 2013-07-08T00:10:28.130 回答
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;
于 2013-07-07T21:53:57.603 回答
0

不,不是。您必须admin_url在数组声明之外获取值才能引用它,或者在单独的步骤中添加引用它的元素。

于 2013-07-07T21:45:35.633 回答