有没有办法从同一个数组中的另一个值访问一个值?

时间:2013-07-07 21:39:06

标签: php arrays

我有一个配置数组:

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 个答案:

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