是否有可能在具有相同数组的另一个元素中引用数组的元素?
我们想说我们想要制作一个这样的数组:
$a = array(
'base_url' => 'https://rh.example.com',
'URL_SLO_OpenAM_OIC' => 'https://openam.example.com/openam/UI/Logout?goto='.$this['base_url'],
);
当然,它不起作用,因为$this
适用于不适用于数组的类。那还有其他选择吗?
答案 0 :(得分:8)
不,不可能那样。您无法在其上下文中引用相同的数组。但这是一个解决方法:
$a = array(
'base_url' => ($base_url = 'https://rh.example.com'),
'URL_SLO_OpenAM_OIC' => 'https://openam.example.com/openam/UI/Logout?goto='.$base_url,
);
答案 1 :(得分:2)
另一种方法是逐个向数组中添加元素。
$a['base_url'] = 'https://rh.example.com';
$a['URL_SLO_OpenAM_OIC'] = 'https://openam.example.com/openam/UI/Logout?goto='.$a['base_url'];
答案 2 :(得分:1)
您无法将数组元素引用到另一个元素。阵列剂量不具备此类功能。如果你这样做,它会给你一个未定义的变量错误。 回答你的问题,你可以将值存储到另一个变量,并在初始化数组时使用该变量。
$base_url = 'https://rh.example.com';
$a = array(
'base_url' => $base_url,
'URL_SLO_OpenAM_OIC' => 'https://openam.example.com/openam/UI/Logout?goto='.$base_url,);
答案 3 :(得分:0)
另一种方法是在分配后替换值,使用令牌来处理简单的情况。
<?php
function substitutor(array $array) {
foreach ($array as $key => $value) {
if(preg_match('/@(\w+)@/', $value, $match)) {
$array[$key] = str_replace($match[0], $array[$match[1]], $value);
}
};
return $array;
}
$array = array(
'foo' => 'bar',
'baz' => 'some' . '@foo@'
);
var_dump($array);
$substituted = substitutor($array);
var_dump($substituted);
输出:
array(2) {
["foo"]=>
string(3) "bar"
["baz"]=>
string(9) "some@foo@"
}
array(2) {
["foo"]=>
string(3) "bar"
["baz"]=>
string(7) "somebar"
}
答案 4 :(得分:0)
你不能用数组做你想要的,因为它们只是数据。但你可以用一个对象来做到这一点:
$myCustomArray = new stdClass;
$myCustomArray->base_url = 'https://rh.example.com';
$myCustomArray->URL_SLO_OpenAM_OIC = function () { echo 'https://openam.example.com/openam/UI/Logout?goto='.$this->base_url; };
然后执行:$myCustomArray->URL_SLO_OpenAM_OIC();