php extract()函数把数据中变量转换成php变量

将变量从PHP数组导出注册为全局变量,实现键名当作变量名,值作为变量的值,如下

 代码如下 复制代码
$vars = array('var1'=>'1','var2'=>'2','var3'=>'3','var4'=>'4','var5'=>'5');

实现通过键名当作变量名的形式访问,如:$var1,$var2

第一种方案:采用PHP内置extract()函数,方法如下

 代码如下 复制代码
extract($vars);

第二种方案:采用foreach循环数组注册为全局变量,方法如下

 代码如下 复制代码
foreach($vars as $k=>$v){
    $GLOBALS[$k] = $v;
}

推荐采用第二种方案,因为extract()函数存在性能和安全问题。

extract() 函数说明

(PHP 3 >= 3.0.7, PHP 4, PHP 5)
extract -- 从数组中将变量导入到当前的符号表

 代码如下 复制代码

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

本函数用来将变量从数组中导入到当前的符号表中。接受结合数组 var_array 作为参数并将键名当作变量名,值作为变量的值。对每个键/值对都会在当前的符号表中建立变量,并受到 extract_type 和 prefix 参数的影响。

参考表

参数 描述
array 必需。规定要使用的输入。
extract_rules
可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中的变量名是否冲突。

对非法、数字和冲突的键名的处理将根据此参数决定。可以是以下值之一:

可能的值:

  • EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
  • EXTR_SKIP - 如果有冲突,不覆盖已有的变量。(忽略数组中同名的元素)
  • EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。自 PHP 4.0.5 起,这也包括了对数字索引的处理。
  • EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix(第三个参数)。
  • EXTR_PREFIX_INVALID - 仅在非法或数字变量名前加上前缀 prefix。本标记是 PHP 4.0.5 新加的。
  • EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如 $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。
  • EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。本标记是 PHP 4.2.0 新加的。
  • EXTR_REFS - 将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志结合使用。本标记是 PHP 4.3.0 新加的。
prefix
可选。请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。

前缀和数组键名之间会自动加上一个下划线。

使用全部参数:

 代码如下 复制代码

<?php
$a = 'Original';
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");

extract($my_array, EXTR_PREFIX_SAME, 'dup');

echo "$a = $a; $b = $b; $c = $c; $dup_a = $dup_a;";
?>

输出:

$a = Original; $b = Dog; $c = Horse; $dup_a = Cat;

 

 

时间: 2024-11-02 00:22:57

php extract()函数把数据中变量转换成php变量的相关文章

static-如何将静态变量转换成普通变量?

问题描述 如何将静态变量转换成普通变量? 我想从静态成员函数中获取变量,这些变量来自另一个类,储存在MainActivity的普通变量中,但是引发了程序奔溃.我需要使用存在于静态成员函数中的字符串.如何解决这个问题? public static void updateMessageBox(String mobileNum12 String mobileMessa12){ smsClass.function(mobileNum12); // smsClass was the Class name

hashmap-Struts1中map转换成json传到前台时取不到值——求指点!

问题描述 Struts1中map转换成json传到前台时取不到值--求指点! 后台报这个: Property 'servlet' has no read method. SKIPPED Property 'servletFor' has no read method. SKIPPED Property 'servlet' has no read method. SKIPPED Property 'servletFor' has no read method. SKIPPED Property '

c++-MFC 中 CString转换成char[]数组

问题描述 MFC 中 CString转换成char[]数组 环境为vs2010 CString szText; char a[1024]; edit1.GetWindowText(szText);//获取edit1编辑框的文本 怎么将CString类 szText 转换为char[]数组的内容? memcpy(a,szText,1024);只能读取文本的第一个字符 解决方案 MFC不建议用char类型了,你用TCHAR,宽字符的处理速度还快些 解决方案二: memcpy(a,(const cha

qt5-QT中QByteArray转换成QString,有遇到过的麻烦进来帮忙一下

问题描述 QT中QByteArray转换成QString,有遇到过的麻烦进来帮忙一下 我是用ZIGBEE串口收到温湿度数据后让QT编写的一个串口助手来读取之后显示在QLineEdit上 QByteArray temp = myCom->readAll(); 想把这个temp转换成QString类型,然后利用QStringList把数据分解出来显示在QLineEdit上,但是一直显示是空白, 在QTextBrowser上就可以显示.这个是什么问题呢?麻烦大神 解决方案 http://www.lin

android中String转换成16进制的方法

问题描述 android中String转换成16进制的方法 想请教一下?把一个24个字节的字符串转换成16进制,并把结果打印出来要怎么写,网上有一些方法但是没有说转换完的16进制串打印出来要用哪个参数?求指点 解决方案 byte[] b = ""字符串"".getBytes();foreach (byte i : b){if (i < 16) System.out.print(""0"" + Integer.toHexS

怎么将Word中文字转换成表格?

  在使用office软件时,常常会在Word中加入表格,这时候我们一般想到的是,建立表格,然后一格一格的填写;或者用Excel表格制作在复制到Word文档中.其实在Word中就可以将文本文档转换成电子表格,此文将告诉你文本文档如何轻松转换成电子表格. Word文档中,用户可以很容易地将文字转换成表格.其中关键的操作是使用分隔符号将文本合理分隔.Word能够识别常见的分隔符,例如段落标记(用于创建表格行).制表符和逗号(用于创建表格列). 一.将Word中文字转换成表格(以Word2003为例)

string-Android中Editable转换成字符

问题描述 Android中Editable转换成字符 比如说,获取EditText的内容 EditText et_content = (EditText)findViewById(R.id.content); String content = et_content.getText().toString(); 我查看到getText()返回的是Editable,为什么Editable可以通过toStirng()转换成String类型? 解决方案 EditText 中getText @Overrid

string-java中object转换成String类型问题

问题描述 java中object转换成String类型问题 class a122{ public static void main(String[] args){ Object d=4; String g=(String)d; } } 为什么运行时这个小程序会出错,按说object不是可以转化成String的吗 解决方案 你这种理解是错误的,因为你定义的Object类是Integer 类型,跟String类型没有关系,不能转换. 虽然可以编译通过,但是会报运行时异常java.lang.Integ

php中字符串转换成数组函数explode(),implode()

行看看这两个函数 implode 函数: 使用函数 implode 将数组转换为字符串 explode 函数: 使用函数 explode 将字符串转换成数组 例1. 今天在php论坛中看到以为朋友发了一个帖子请教php如何把字符串转换成数组;作为php程序员的新一第一反应是联想到explode(),implode()这两个函数.新一也是用里面的函数进行转换成数组的. con[1]=28&selt[1]=1&con[2]=29&selt[2]=4&con[3]=26&