php - extract array into global variables
The manual on "extract" shows you can extract an array like:
extract(array('one'=>1,'two'=>2));
into $one,$two...
But the extract function doesn't return the variables. Is there a way to 'globalize' these variables? Maybe not using extract, but a foreach loop?
EDIT: (explanation about what I'm trying to achieve) I have an array containing hundreds of output messages which I want to have accessible as variables efficiently. What I mean is that whenever I want to output a message, say:
$englishMessages = array('helloWorld'=>'Hello World');
$spanishMessages = array('helloWorld'=>'Hola Mundo');
'<span id="some">'. $helloWorld .'</span>';
The message would appear. The reaso开发者_运维百科n I'm doing it like this is so that users can change the language they're viewing the website in, so something like: ''. $helloWorld .''; would produce:
Hola Mundo!
$GLOBALS += $vars;
for example
function foo() {
$vars = array('aa' => 11, 'bb' => 22);
$GLOBALS += $vars;
}
foo();
echo $aa; // prints 11
that said, can you explain why you need this? Using global variables is considered poor style, maybe there's a better way
Not exactly an answer to your question ...but: Keep the array, don't pollute the (global) variable namespace.
$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>';
Some variations on the same theme:
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>';
or
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>';
You might also be interested in http://docs.php.net/gettext
You mean:
foreach($array as $var_name => $var_value)
{
global $$var_name;
$$var_name = $var_value;
}
This will global each variable, and then set it to your value. For yours it would create $one
, and $two
using extract() on an array will create new variables inside the current scope, or assign new values to existing variables.
I'm not sure what you mean by "globalize", but my understanding is that you are trying to accomplish exactly what extract() does, just be mindful of the current scope (if you extract() from within a function, the extracted variables will only be available inside the function itself).
foreach ($array as $key => $value) {
// initialize the variables as global
global $$key;
$$key = $value;
}
EDIT:
Just noticed a mistake of mine, you'd have to make the key of the array into a variable, which can be done by converting it to a variable variables using $$
notation.
Are you looking for the variables that have been extracted? You can find them using array_keys()
精彩评论