是否有方法从同一数组中的另一个值访问一个值


Is there a way to access a value from another value in the same array?

我有一个配置数组:

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的值才能引用它,或者在单独的步骤中添加引用它的元素。