


php中的extract函數(shù)
添加時(shí)間:2014-12-9 1:52:11
添加:
思海網(wǎng)絡(luò)
extract函數(shù)用來將一個(gè)數(shù)字分解成多個(gè)變量直接使用,下面是W3C的解釋:PHP extract() 函數(shù)從數(shù)組中把變量導(dǎo)入到當(dāng)前的符號(hào)表中。對(duì)于數(shù)組中的每個(gè)元素,鍵名用于變量名,鍵值用于變量值。第二個(gè)參數(shù) type 用于指定當(dāng)某個(gè)變量已經(jīng)存在,而數(shù)組中又有同名元素時(shí),extract() 函數(shù)如何對(duì)待這樣的沖突。本函數(shù)返回成功設(shè)置的變量數(shù)目。
下面表格是參數(shù)說明:
語法
extract(array,extract_rules,prefix)
參數(shù) 描述
array 必需。規(guī)定要使用的輸入。
extract_rules
可選。extract() 函數(shù)將檢查每個(gè)鍵名是否為合法的變量名,同時(shí)也檢查和符號(hào)表中的變量名是否沖突。
對(duì)非法、數(shù)字和沖突的鍵名的處理將根據(jù)此參數(shù)決定。可以是以下值之一:
可能的值:
EXTR_OVERWRITE - 默認(rèn)。如果有沖突,則覆蓋已有的變量。
EXTR_SKIP - 如果有沖突,不覆蓋已有的變量。(忽略數(shù)組中同名的元素)
EXTR_PREFIX_SAME - 如果有沖突,在變量名前加上前綴 prefix。自 PHP 4.0.5 起,這也包括了對(duì)數(shù)字索引的處理。
EXTR_PREFIX_ALL - 給所有變量名加上前綴 prefix(第三個(gè)參數(shù))。
EXTR_PREFIX_INVALID - 僅在非法或數(shù)字變量名前加上前綴 prefix。本標(biāo)記是 PHP 4.0.5 新加的。
EXTR_IF_EXISTS - 僅在當(dāng)前符號(hào)表中已有同名變量時(shí),覆蓋它們的值。其它的都不處理。可以用在已經(jīng)定義了一組合法的變量,然后要從一個(gè)數(shù)組例如 $_REQUEST 中提取值覆蓋這些變量的場合。本標(biāo)記是 PHP 4.2.0 新加的。
EXTR_PREFIX_IF_EXISTS - 僅在當(dāng)前符號(hào)表中已有同名變量時(shí),建立附加了前綴的變量名,其它的都不處理。本標(biāo)記是 PHP 4.2.0 新加的。
EXTR_REFS - 將變量作為引用提取。這有力地表明了導(dǎo)入的變量仍然引用了 var_array 參數(shù)的值。可以單獨(dú)使用這個(gè)標(biāo)志或者在 extract_type 中用 OR 與其它任何標(biāo)志結(jié)合使用。本標(biāo)記是 PHP 4.3.0 新加的。
prefix
可選。請(qǐng)注意 prefix 僅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 時(shí)需要。如果附加了前綴后的結(jié)果不是合法的變量名,將不會(huì)導(dǎo)入到符號(hào)表中。
前綴和數(shù)組鍵名之間會(huì)自動(dòng)加上一個(gè)下劃線。
這個(gè)在從數(shù)據(jù)庫中取得一行數(shù)據(jù)的時(shí)候很好用,我們來看下面的例子
復(fù)制代碼
<?php
$db = mysql_connect('localhost','root','Ctrip07185419') or die('can not connect to mysql');
mysql_select_db('moviesite',$db) or die(mysql_error($db));
mysql_query('set names gbk',$db);
if(isset($_GET['action']) && $_GET['action'] == 'edit')
{
$query = 'SELECT movie_name,movie_type,movie_year,movie_leadactor,movie_director FROM movie WHERE movie_id='.$_GET['id'];
//echo $query;
$result = mysql_query($query , $db) or die(mysql_error($db));
extract(mysql_fetch_assoc($result));
}
else
{
$movie_name='';
$movie_type=0;
$movie_year=date('Y');
$movie_leadactor=0;
$movie_director=0;
}
?>
<html>
<head>
<title><?php echo ucfirst($_GET['action']);?> Movie</title>
<style type="text/css"></style>
</head>
<body>
<form action="commit.php?action=<?php echo $_GET['action'];?>&type=movie" method="post">
<table>
<tr>
<td>Movie Name</td>
<td><input type="text" name="movie_name" value="<?php echo $movie_name;?>"/></td>
</tr>
<tr>
<td>Movie Type</td>
<td><select name="movie_type" id="">
<?php
$query = 'select movietype_id,movietype_label from movietype order by movietype_label';
$result = mysql_query($query , $db) or die(mysql_error($db));
while($row = mysql_fetch_assoc($result))
{
if($row['movietype_id'] == $movie_type)
{
echo '<option value="'.$row["movietype_id"].'" selected="selected">'.$row["movietype_label"].'</option>';
}
else
{
echo '<option value="'.$row["movietype_id"].'">'.$row["movietype_label"].'</option>';
}
}
?>
</select></td>
</tr>
<tr>
<td>Movie Year</td>
<td><select name="movie_year" id="">
<?php
for($yr = date('Y');$yr>1970;$yr--)
{
if($yr == $movie_year)
{
echo '<option value="'.$yr.'" selected="selected">'.$yr.'</option>';
}
else
{
echo '<option value="'.$yr.'">'.$yr.'</option>';
}
}
?>
</select></td>
</tr>
<tr>
<td>Lead actor</td>
<td><select name="movie_leadactor" id="">
<?php
$query = 'select people_id,people_fullname from people where people_isactor = 1 order by people_fullname';
$result = mysql_query($query,$db) or die(mysql_error($db));
while($row = mysql_fetch_assoc($result))
{
if($row["people_id"] == $movie_leadactor)
{
echo '<option value="'.$row["people_id"].'" selected="selected">'.$row["people_fullname"].'</option>';
}
else
{
echo '<option value="'.$row["people_id"].'">'.$row["people_fullname"].'</option>';
}
}
?>
</select></td>
</tr>
<tr>
<td>Director</td>
<td><select name="movie_director" id="">
<?php
$query = 'select * from people where people_isdirector=1 order by people_fullname';
$result = mysql_query($query , $db) or die(mysql_error($db));
while($row = mysql_fetch_assoc($result))
{
if($row['people_id'] == $movie_director)
{
echo '<option value="'.$row['people_id'].'" selected="selected">'.$row["people_fullname"].'</option>';
}
else
{
echo '<option value="'.$row['people_id'].'">'.$row["people_fullname"].'</option>';
}
}
?>
</select></td>
</tr>
<tr>
<td colspan="2" style="text-align:center">
<?php
if('edit' == $_GET['action'])
{
echo '<input type="hidden" value="'.$_GET["id"].'" name="movie_id"/>';
}
?>
<input type="submit" name="submit" value="<?php echo ucfirst($_GET['action']);?>"/>
</td>
</tr>
</table>
</form>
</body>
</html>
復(fù)制代碼
注意標(biāo)紅的語句,在使用extract之后可以直接使用變量,并且變量的名字是字段名字,變量的值是字段的值,這個(gè)有點(diǎn)類似于ado.net中從DataReader或DataSet中取得數(shù)據(jù)的方法Movie.Name = DataSet.Table[o].Row[i]["Name "].ToString() Movie.Name=reader["Name "].ToString();
關(guān)鍵字:php、函數(shù)、變量
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解