3.10.4 将数组转换成标量变量:extract()

对于一个非数字索引数组,而该数组又有许多关键字-值对,可以使用函数extract()将它们转换成一系列的标量变量。extract()的函数原型如下所示:


extract(array var_array[,int extract_type][,string prefix]);


函数extract()的作用是通过一个数组创建一系列的标量变量,这些变量的名称必须是数组中关键字的名称,而变量值则是数组中的值。

如下所示的是一个简单的例子:


$array=array('key1'=>'value1','key2'=>'value2','key3'=>'value3');

extract($array);

echo"$key1$key2$key3";


这段代码的输出如下所示:


value1 value2 value3


这个数组具有3个元素,它们的关键字分别是:key1、key2和key3。使用函数extract(),可以创建3个标量变量$key1、$key2和$key3。从输出结果中,可以看到$key1、$key2和$key3的值分别为"value1"、"value2"和"value3"。这些值都来自原来的数组。extract()函数具有两个可选参数:extract_type和prefix。变量extract_type将告诉extract()函数如何处理冲突。有时可能已经存在了一个和数组关键字同名的变量,该函数的默认操作是覆盖已有的变量。表3-2给出了extract_type的可用值。

3.10.4 将数组转换成标量变量:extract() - 图1

两个最常用的选项是EXTR_OVERWRITE(默认值)和EXTR_PREFIX_ALL。当知道会发生特定的冲突并且希望跳过该关键字或要给它加上前缀时,可能会用到其他选项。如下所示的是一个使用EXTR_PREFIX_ALL的简单例子。可以看到所有被创建的变量名称都具有前缀-下画线-关键字名称的格式。


$array=array('key1'=>'value1','key2'=>'value2','key3'=>'value3');

extract($array,EXTR_PREFIX_ALL,'my_prefix');

echo"$my_prefix_key1$my_prefix_key2$my_prefix_key3";


以上代码将再次输出:value1 value2 value3。

请注意,extract()可以提取出一个元素,该元素的关键字必须是一个有效的变量名称,这就意味着以数字开始或包含空格的关键字将被跳过。