您的位置:首页 > 编程语言 > PHP开发

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

2017-12-29 14:00 561 查看

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>
<
4000
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: