在数组元素中引用同一数组的另一个元素

时间:2016-04-22 07:57:10

标签: php arrays

是否有可能在具有相同数组的另一个元素中引用数组的元素?

我们想说我们想要制作一个这样的数组:

$a = array(
    'base_url' => 'https://rh.example.com',
    'URL_SLO_OpenAM_OIC' => 'https://openam.example.com/openam/UI/Logout?goto='.$this['base_url'],
);

当然,它不起作用,因为$this适用于不适用于数组的类。那还有其他选择吗?

5 个答案:

答案 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();