0

私は構成の配列を持っています:

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

4 に答える 4

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;

「動的」ではありません。クラスを構築した場合、「動的に」必要なことを実行できる可能性があります。

于 2013-07-07T21:46:38.610 に答える
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;
于 2013-07-07T21:53:57.603 に答える
1

Jonらが述べたように、配列宣言内の値にアクセスすることはできません。

これを実現するためにどのようなコンテキストが必要かはわかりませんが、本当に配列を再構成する必要がある場合は、次のような関数でラップします (PHP >=5.3 でのみ機能します)。

関数 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)=='リンク'){          
            $return['routes'][$key] = $return['admin_url'].$val;
         }
      });
   $リターンを返します。
}

そして、次のように呼び出します。

$config = set_config_routes($config);

Mike W や他の人も述べているように、より効率的な練習のためにクラスとオブジェクトの使用を実際に検討する必要があります。

于 2013-07-08T00:10:28.130 に答える
0

いいえ、そうではありません。それを参照するには、配列宣言の外で の値を取得するadmin_urlか、それを参照する要素を別の手順で追加する必要があります。

于 2013-07-07T21:45:35.633 に答える