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!
答案 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>';
感兴趣
答案 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()