【PHP基础知识点】extract处理$_POST和$_GET数组的作用

Question. 问题

form 表单通过 post 的方式能够向后台传输大量的数据,这些数据以数组的形式被封装在 $_POST 中,如:

$_POST = array(
    'id' => 1, 
    'code' => 'shorh',
    'cat_id' => 55,
    'name' => '防晒霜',
    'brand_id' => 23,
);

或者是 URL 通过 get 的方式传参,数据以数组的形式被封装在 $_GET 中,比如 URL 为http://localhost/demo/extract/demo.php?a=1&b=2

$_GET = array ( 
    'a' => 1,
    'b' => 2 
); 

正常的我们解析这些数据,需要:

$id = $_POST['id'];
$code = $_POST['code'];
$cat_id = $_POST['cat_id'];
$name = $_POST['name'];
$brand_id = $_POST['id'];

这样的手工解析很麻烦,有没有什么方法能够处理这些数据呢?
extract() 方法可用于将数组展开,键名作为变量名,元素值为变量值,简单的说,就是能够直接将 $_POST$_GET 中的变量解析出来,不需要我们手工赋值处理。

Solution. 解决

<?php
error_reporting(0);
print_r($_POST);
echo "<br>";
extract($_POST);
echo("\$username = ".$username."<br>");
echo("\$password = ".$password."<br>");
?><!DOCTYPE html>
<html>
<head>
    <title>ExtractDemo</title>
    <meta charset="utf-8">
</head>
<body>
<!-- 测试代码 -->
<form  method="post">
    <input type="text" name="username" value="<?php echo($username)?>">
    <input type="password" name="password" value="<?php echo($password)?>">
    <input type="submit" >
    <br>输入文字
</form>

<!-- 说明 -->
<h4>1. extract()有什么用?</h4>
它的主要作用是将数组展开,方便对数组的操作,比方说,可以很方便的提取$_POST或者$_GET的元素,对表单提交上来的内容不用一一赋值。
<h4>2. extract()怎么用?</h4>
键名作为变量名,元素值为变量值

</body>
</html>

对于 post上来的数据通过extract($_POST); 解析,我们就可以直接通过变量的方式使用了。

Extension. 扩展

extract() 函数还有两个扩展参数,用来指定在一些特殊情况下(比如变量名重名冲突了之类),怎么处理这些变量,这些在平时开发中较少遇到,大家作为了解:

<?php
/* 假定 $var_array 是 wddx_deserialize 返回的数组*/
$size = "large";
$var_array = array(
    "color" => "blue",
    "size"  => "medium",
    "shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "\$color = $color<br>";
echo "\$size = $size<br>";
echo "\$shape = $shape<br>";
echo "\$wddx_size = $wddx_size<br>";

?><!DOCTYPE html>
<html>
<head>
    <title>ExtractDemo</title>
    <meta charset="utf-8">
</head>
<body>


<!-- 说明 -->
<div>
    <div style="font-weight: 700;">EXTR_OVERWRITE</div>
    <div >如果有冲突,覆盖已有的变量。</div>
</div>
<div>
    <div style="font-weight: 700;">EXTR_SKIP</div>
    <div >如果有冲突,不覆盖已有的变量。</div>
</div>
<div>
    <div style="font-weight: 700;">EXTR_PREFIX_SAME</div>
    <div >如果有冲突,在变量名前加上前缀 prefix 。</div>
</div>
<div>
    <div style="font-weight: 700;">EXTR_PREFIX_ALL</div>
    <div >给所有变量名加上前缀 prefix 。</div>
</div>
<div>
    <div style="font-weight: 700;">EXTR_PREFIX_INVALID</div>
    <div >仅在非法/数字的变量名前加上前缀 prefix 。</div>
</div>
<div>
    <div style="font-weight: 700;">EXTR_IF_EXISTS</div>
    <div >仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如 $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。</div>
</div>
<div>
    <div style="font-weight: 700;">EXTR_PREFIX_IF_EXISTS</div>
    <div >仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。</div>
</div>
<div>
    <div style="font-weight: 700;">EXTR_REFS</div>
    <div >将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值</div>
</div>
<div>
    <div style="font-weight: 700;">EXTR_PREFIX_INVALID</div>
    <div >仅在非法/数字的变量名前加上前缀 prefix 。</div>
</div>

</body>
</html>
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值