php - 将数组提取到全局变量中

时间:2010-02-07 16:34:01

标签: php arrays variables extract global

The manual on "extract"显示您可以提取如下数组:

extract(array('one'=>1,'two'=>2));

分成1美元,2美元......

但是提取函数不返回变量。有没有办法将这些变量“全球化”?也许不是使用提取,而是使用foreach循环?

编辑:(关于我想要实现的目标的解释) 我有一个包含数百个输出消息的数组,我希望它们可以作为变量有效地访问。我的意思是每当我想输出一条消息时,请说:

$englishMessages = array('helloWorld'=>'Hello World');
$spanishMessages = array('helloWorld'=>'Hola Mundo');
'<span id="some">'. $helloWorld .'</span>';

将显示该消息。我这样做的原因是用户可以更改他们正在查看网站的语言,所以类似于:     ''。 $ helloWorld。''; 会产生:

Hola Mundo!

6 个答案:

答案 0 :(得分:4)

 $GLOBALS += $vars;

例如

function foo() {
  $vars = array('aa' => 11, 'bb' => 22);
  $GLOBALS += $vars;
}

foo();
echo $aa; // prints 11

那说,你能解释一下为什么需要这个吗?使用全局变量被认为是糟糕的风格,也许有更好的方式

答案 1 :(得分:4)

不完全是你问题的答案......但是:保留数组,不要污染(全局)变量命名空间。

$englishMessages = array('helloWorld'=>'Hello World');
$spanishMessages = array('helloWorld'=>'Hola Mundo');

// wrap this in a nice function/method
$lang = $englishMessages;
// then use $lang for the output
'<span id="some">'. $lang['helloWorld'] .'</span>';

同一主题的一些变体:

function getMessages($language) {
  static $l = array(
    'en'=> array('helloWorld'=>'Hello World'),
    'es' => array('helloWorld'=>'Hola Mundo')
  );
  // <-- add handling reporting here -->
  return $l[$language];
}

$lang = getMessages('en');
echo '<span id="some">'. $lang['helloWorld'] .'</span>';

function __($language, $id) {
  static $l = array(
    'en'=> array('helloWorld'=>'Hello World'),
    'es' => array('helloWorld'=>'Hola Mundo')
  );
  // <-- add error handling here -->
  return $l[$language][$id];
}

echo '<span id="some">'. __('es', 'helloWorld') .'</span>';

您可能也对http://docs.php.net/gettext

感兴趣

答案 2 :(得分:2)

在数组上使用extract()将在当前作用域内创建新变量,或为现有变量赋值。

我不确定你对“globalize”的意思,但我的理解是你正在努力完成extract()的功能,只要注意当前的范围(如果你从函数中提取() ,提取的变量只能在函数本身内部使用。)

答案 3 :(得分:2)

你的意思是:

 foreach($array as $var_name => $var_value)
 {
       global $$var_name;
       $$var_name = $var_value;
 }

这将全局变量,然后将其设置为您的值。对于你的,它会创建$one$two

答案 4 :(得分:1)

foreach ($array as $key => $value) {
  // initialize the variables as global
   global $$key;
   $$key = $value;
}

编辑:

刚刚注意到我的一个错误,你必须将数组的键变成一个变量,这可以通过使用$$表示法将其转换为variable variables来完成。

答案 5 :(得分:0)

您在寻找已提取的变量吗?您可以使用array_keys()

找到它们