php - извлечь массив в глобальные переменные - PullRequest
3 голосов
/ 07 февраля 2010

Руководство по извлечению показывает, что вы можете извлечь массив, например:

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

в $ один, $ два ...

Но функция извлечения не возвращает переменные. Есть ли способ «глобализировать» эти переменные? Может быть, не с помощью экстракта, но цикл foreach?

РЕДАКТИРОВАТЬ: (объяснение того, что я пытаюсь достичь) У меня есть массив, содержащий сотни выходных сообщений, которые я хочу иметь доступными в качестве переменных эффективно. Я имею в виду, что всякий раз, когда я хочу вывести сообщение, скажите:

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

Появится сообщение. Причина, по которой я так поступаю, заключается в том, что пользователи могут менять язык, на котором они просматривают веб-сайт, например: ''. $ helloWorld. ''; будет производить:

Hola Mundo!

Ответы [ 6 ]

4 голосов
/ 07 февраля 2010

Не совсем ответ на ваш вопрос ... но: сохраняйте массив, не загрязняйте пространство имен (глобальной) переменной.

$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

4 голосов
/ 07 февраля 2010
 $GLOBALS += $vars;

например

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

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

тем не менее, вы можете объяснить, зачем вам это нужно? Использование глобальных переменных считается плохим стилем, может быть, есть лучший способ

2 голосов
/ 07 февраля 2010

Вы имеете в виду:

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

Это приведет к глобальному изменению каждой переменной, а затем установит ее на ваше значение. Для вас это создаст $one и $two

2 голосов
/ 07 февраля 2010

использование extract () в массиве создаст новые переменные внутри текущей области или назначит новые значения существующим переменным.

Я не уверен, что вы подразумеваете под "глобализацией", но я понимаю, что вы пытаетесь выполнить именно то, что делает extract (), просто помните о текущей области действия (если вы извлекаете () из функции извлеченные переменные будут доступны только внутри самой функции).

1 голос
/ 07 февраля 2010
foreach ($array as $key => $value) {
  // initialize the variables as global
   global $$key;
   $$key = $value;
}

EDIT:

Только что заметил мою ошибку: вам нужно превратить ключ массива в переменную, что можно сделать, преобразовав его в переменные с помощью $$ нотация.

0 голосов
/ 07 февраля 2010

Вы ищете переменные, которые были извлечены? Вы можете найти их, используя array_keys()

...