Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-将数组提取到全局变量中_Php_Arrays_Variables_Extract_Global - Fatal编程技术网

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

php-将数组提取到全局变量中,php,arrays,variables,extract,global,Php,Arrays,Variables,Extract,Global,显示您可以提取如下数组: extract(array('one'=>1,'two'=>2)); 变成1美元2美元 但是extract函数不返回变量。有没有办法“全球化”这些变量?也许不是使用提取,而是使用foreach循环 编辑:(解释我试图实现的目标) 我有一个数组,其中包含数百条输出消息,我希望能够作为变量有效地访问这些消息。我的意思是,每当我想输出消息时,说: $englishMessages = array('helloWorld'=>'Hello World');

显示您可以提取如下数组:

extract(array('one'=>1,'two'=>2));
变成1美元2美元

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

编辑:(解释我试图实现的目标)
我有一个数组,其中包含数百条输出消息,我希望能够作为变量有效地访问这些消息。我的意思是,每当我想输出消息时,说:

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

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

foo();
echo $aa; // prints 11
也就是说,你能解释一下你为什么需要这个吗?使用全局变量被认为是糟糕的风格,也许有更好的方法

foreach ($array as $key => $value) {
  // initialize the variables as global
   global $$key;
   $$key = $value;
}
编辑: 刚刚注意到我的一个错误,您必须将数组的键转换为变量,这可以通过使用
$
符号将其转换为。

在数组上使用extract()将在当前范围内创建新变量,或将新值分配给现有变量

我不确定“globalize”是什么意思,但我的理解是,您正试图完成extract()的确切功能,请注意当前范围(如果从函数中提取(),则提取的变量将仅在函数本身内部可用)。

您的意思是:

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

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

您正在查找已提取的变量吗?您可以使用

找到它们,这并不是您问题的答案……但是:保留数组,不要污染(全局)变量名称空间

$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>';
$englishMessages=array('helloWorld'=>'helloWorld');
$spanishMessages=array('helloWorld'=>'Hola Mundo');
//用一个好的函数/方法包装它
$lang=$englishMessages;
//然后使用$lang作为输出
''. $朗['helloWorld']。';
同一主题的一些变体:

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>';
函数getMessages($language){ 静态$l=数组( 'en'=>数组('helloWorld'=>'Hello World'), 'es'=>数组('helloWorld'=>'Hola Mundo') ); // 返回$l[$language]; } $lang=getMessages('en'); 回显“”$朗['helloWorld']。'; 或

function\u($language,$id){
静态$l=数组(
'en'=>数组('helloWorld'=>'Hello World'),
'es'=>数组('helloWorld'=>'Hola Mundo')
);
// 
返回$l[$language][$id];
}
回显“”__('es','helloWorld');

您可能还对

我有一个包含数百个变量=>输出消息的数组感兴趣。你认为有更好的做法吗?(我不希望这些消息是常量,因为它们可能必须更改)。这不起作用,因为
$key
将仅是数组中最后一项的值。如果全局变量名为
$value
,则将与局部变量
$value
发生冲突。所以最好分配
$GLOBALS[$key]=$value
.Global variables和extract()是PHP中我最不喜欢的两个部分。。。所以,这个问题让我有点恶心。可以用另一种方法解决您的应用程序问题吗?@ojrac:当然,我在编辑时有一个更详细的解释。我对语法很生疏,但这里有一个想法:$language=get_lang('en'),然后是“${language['helloWorld']}”@ojrac,我之所以不使用它,是因为我想使用变量,而不是数组。嘿,太完美了,参见@code\u burgar答案。另一种“PHP方式”是
list($a,$b,…)=$array
(!)。我不明白你为什么需要更多…你建议不要让$lang全球化吗?不管是$lang本身还是它的元素,是的。只需使用返回数组的函数/方法。-1:没有回答问题。如果你想告诫提问者更好地回答问题,然后告诉他们为什么不使用它,因为有人可能希望将其用于有效的用例(例如与现有CMS兼容)。@MikeSchinkel:我大体上同意你的观点,但是,在这种特殊情况下,选择不采取相应行动,只接受否决票。我宁愿这个“答案”没有被标记为“接受”,就像我通常以“不是你问题的真正/确切答案”开头一样作为参考,以防我再次搜索此<代码>提取与关联数组一起使用,对索引数组使用
列表
如果您的全局变量恰好命名为
$var\u value
,您将与局部变量
$var\u value
发生冲突。所以最好分配
$GLOBALS[$var\u name]=$var\u值
$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>';