В руководстве по «извлечению» показано, что вы можете извлечь массив, например:
extract(array('one'=>1,'two'=>2));
в $ 1, $ 2 …
Но функция extract не возвращает переменные. Есть ли способ «глобализации» этих переменных? Может быть, не использовать экстракт, а цикл foreach?
EDIT: (объяснение о том, чего я пытаюсь достичь) У меня есть массив, содержащий сотни выходных сообщений, которые я хочу иметь доступными как переменные эффективно. Я имею в виду, что всякий раз, когда я хочу вывести сообщение, скажите:
$englishMessages = array('helloWorld'=>'Hello World'); $spanishMessages = array('helloWorld'=>'Hola Mundo'); '<span id="some">'. $helloWorld .'</span>';
Появится сообщение. Причина, по которой я делаю это, так это то, что пользователи могут изменять язык, на котором они просматривают веб-сайт, поэтому что-то вроде: ''. $ helloWorld. ''; будет производить:
Hola Mundo!
Не совсем ответ на ваш вопрос … но: Храните массив, не загрязняйте (глобальное) пространство имен переменных.
$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
$GLOBALS += $vars;
например
function foo() { $vars = array('aa' => 11, 'bb' => 22); $GLOBALS += $vars; } foo(); echo $aa; // prints 11
что вы можете объяснить, зачем вам это нужно? Использование глобальных переменных считается плохим стилем, возможно, есть лучший способ
использование extract () в массиве будет создавать новые переменные внутри текущей области или назначать новые значения для существующих переменных.
Я не уверен, что вы подразумеваете под «глобализацией», но я понимаю, что вы пытаетесь выполнить именно то, что делает extract (), просто помните о текущей области (если вы извлекаете () изнутри функции, извлеченный переменные будут доступны только внутри самой функции).
Ты имеешь в виду:
foreach($array as $var_name => $var_value) { global $$var_name; $$var_name = $var_value; }
Это будет глобальная каждая переменная, а затем установите ее значение. Для вас это создало бы $one
и $two
foreach ($array as $key => $value) { // initialize the variables as global global $$key; $$key = $value; }
Только что заметила мою ошибку, вам нужно сделать ключ массива переменной, что можно сделать, переведя его в переменные переменные, используя нотацию $$
.
Вы ищете переменные, которые были извлечены? Их можно найти с помощью array_keys()