我在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
但是,由于缺乏上下文,我必须指出,此解决方案有一些值得注意的警告:
- 您可能会覆盖具有相同名称的其他变量。PHP 不会警告或以其他方式通知您这种情况正在发生。例如,请考虑以下代码:
function saveData() {
$isAuthenticated = $_SESSION['user'];
extract($_POST);
if (!$isAuthenticated) {
return false;
}
// Save data
}
这里的问题是,如果有人将isAuthenticated
作为请求有效负载的一部分发送,这将覆盖您自己的变量。
- 大多数 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]];
}