2016-04-22 35 views
2

配列の要素を同じ配列の別の要素に参照する可能性はありますか?配列要素の参照同じ配列の別の要素

のは、我々はこのような配列を作りたいとしましょう:$thisはない配列のためのクラスを対象としているため

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

はもちろん、それは動作しません。それで代替手段はありますか?

+0

は、なぜあなたは$これを使用していますか?あなたはクラスの範囲でそれを使用していますか? –

+0

いいえ、私が参考にしたいことを説明したかっただけです。配列はクラスのスコープ内にありません。 – rsabir

+1

キーワード$ thisを使用しないでください(オブジェクトを表すため)、配列として表現することはできません。 –

答えて

7

いいえ、それはできません。そのコンテキスト内で同じ配列を参照することはできません。しかし、ここでは回避策があります:

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

代わりに、要素を1つずつ配列に追加することもできます。

$a['base_url'] = 'https://rh.example.com'; 
$a['URL_SLO_OpenAM_OIC'] = 'https://openam.example.com/openam/UI/Logout?goto='.$a['base_url']; 
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,); 
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' . '@[email protected]' 
); 

var_dump($array); 
$substituted = substitutor($array); 
var_dump($substituted); 

出力:

array(2) { 
    ["foo"]=> 
    string(3) "bar" 
    ["baz"]=> 
    string(9) "[email protected]@" 
} 
array(2) { 
    ["foo"]=> 
    string(3) "bar" 
    ["baz"]=> 
    string(7) "somebar" 
} 
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();