如何在 PHP 中将所有数组元素移动到全局范围



我在PHP中有一个返回数组的函数:

$Function_Returned_Array = array(
  ['Array_1'] => array('Element1', 'Element2', 'Element3'),
  ['Array_2'] => array('Element4', 'Element5', 'Element6'),
  ['Array_3'] => array('Element7', 'Element8', 'Element9')
);

但我在全局范围内真正需要的是三个单独的数组:

  $Array_1 = array('Element1', 'Element2', 'Element3');
  $Array_2 = array('Element4', 'Element5', 'Element6');
  $Array_3 = array('Element7', 'Element8', 'Element9');

这样在全局范围内,我不需要调用:

$Function_Returned_Array['Array_1']

但我可以打电话:

$Array_1

如何将所有数组元素移动到全局范围?

你可以做:

foreach ($fnc_returned_arr as $key => $arr)
{
    ${$key} = $arr;
}
echo '<pre>'. print_r($Array_1, 1) .'</pre>';

所以我们只是循环并使用数组键作为 var 名称,以便在其他地方使用:)

正如我在评论中指出的,PHP 确实有一个函数可以做到这一点:

$Function_Returned_Array = array(
  'Array_1' => array('Element1', 'Element2', 'Element3'),
  'Array_2' => array('Element4', 'Element5', 'Element6'),
  'Array_3' => array('Element7', 'Element8', 'Element9')
);
extract($Function_Returned_Array);
print_r($Array_1); //Works

但是,由于缺乏上下文,我必须指出,此解决方案有一些值得注意的警告:

  1. 您可能会覆盖具有相同名称的其他变量。PHP 不会警告或以其他方式通知您这种情况正在发生。例如,请考虑以下代码:
function saveData() {
     $isAuthenticated = $_SESSION['user'];
     extract($_POST);
     if (!$isAuthenticated) {
        return false;
     }
     // Save data
}

这里的问题是,如果有人将isAuthenticated作为请求有效负载的一部分发送,这将覆盖您自己的变量。

  1. 大多数 IDE 不会知道这些变量的存在,这将导致丢失任何完成帮助,并经常收到未定义变量的警告。

经过一段时间的工作,这是我自己的解决方案,使用:

  • array_keys()
  • 动态变量

有没有比这更好的解决方案?

for ($i = 0; $i < count(array_keys($My_Array)); $i++) {
  ${array_keys($My_Array)[$i]} = $My_Array[array_keys($My_Array)[$i]];
}

相关内容

  • 没有找到相关文章

最新更新