Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 914

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>extract</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="PHP 手册"
HREF="index.html"><LINK
REL="UP"
TITLE="Array 数组函数"
HREF="ref.array.html"><LINK
REL="PREVIOUS"
TITLE="end"
HREF="function.end.html"><LINK
REL="NEXT"
TITLE="in_array"
HREF="function.in-array.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="refentry"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>PHP 手册</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="function.end.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="function.in-array.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="function.extract"
></A
>extract</H1
><DIV
CLASS="refnamediv"
><A
NAME="AEN12912"
></A
><P
>    (PHP 3 &#62;= 3.0.7, PHP 4, PHP 5)</P
>extract&nbsp;--&nbsp;从数组中将变量导入到当前的符号表</DIV
><DIV
CLASS="refsect1"
><A
NAME="AEN12915"
></A
><H2
>说明</H2
>int <B
CLASS="methodname"
>extract</B
> ( array var_array [, int extract_type [, string prefix]] )<BR
></BR
><P
>&#13;   本函数用来将变量从数组中导入到当前的符号表中。接受结合数组
   <CODE
CLASS="parameter"
>var_array</CODE
> 作为参数并将键名当作变量名,值作为变量的值。对每个键/值对都会在当前的符号表中建立变量,并受到
   <CODE
CLASS="parameter"
>extract_type</CODE
> 和 <CODE
CLASS="parameter"
>prefix</CODE
> 参数的影响。
  </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    自版本 4.0.5 起本函数返回被提取的变量数目。
   </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    <TT
CLASS="constant"
><B
>EXTR_IF_EXISTS</B
></TT
> 和
    <TT
CLASS="constant"
><B
>EXTR_PREFIX_IF_EXISTS</B
></TT
> 是版本 4.2.0 中引进的。
   </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    <TT
CLASS="constant"
><B
>EXTR_REFS</B
></TT
> 是版本 4.3.0 中引进的。
   </P
></BLOCKQUOTE
></DIV
><P
>&#13;   <B
CLASS="function"
>extract()</B
> 检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。对待非法/数字和冲突的键名的方法将根据
   <CODE
CLASS="parameter"
>extract_type</CODE
> 参数决定。可以是以下值之一:
   <P
></P
><DIV
CLASS="variablelist"
><DL
><DT
><TT
CLASS="constant"
><B
>EXTR_OVERWRITE</B
></TT
></DT
><DD
><P
>&#13;       如果有冲突,覆盖已有的变量。
      </P
></DD
><DT
><TT
CLASS="constant"
><B
>EXTR_SKIP</B
></TT
></DT
><DD
><P
>&#13;       如果有冲突,不覆盖已有的变量。
      </P
></DD
><DT
><TT
CLASS="constant"
><B
>EXTR_PREFIX_SAME</B
></TT
></DT
><DD
><P
>如果有冲突,在变量名前加上前缀 <CODE
CLASS="parameter"
>prefix</CODE
>。
      </P
></DD
><DT
><TT
CLASS="constant"
><B
>EXTR_PREFIX_ALL</B
></TT
></DT
><DD
><P
>&#13;       给所有变量名加上前缀
       <CODE
CLASS="parameter"
>prefix</CODE
>。自 PHP 4.0.5 起这也包括了对数字索引的处理。
      </P
></DD
><DT
><TT
CLASS="constant"
><B
>EXTR_PREFIX_INVALID</B
></TT
></DT
><DD
><P
>&#13;       仅在非法/数字的变量名前加上前缀
       <CODE
CLASS="parameter"
>prefix</CODE
>。本标记是 PHP 4.0.5 新加的。
      </P
></DD
><DT
><TT
CLASS="constant"
><B
>EXTR_IF_EXISTS</B
></TT
></DT
><DD
><P
>&#13;       仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如
       $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。
      </P
></DD
><DT
><TT
CLASS="constant"
><B
>EXTR_PREFIX_IF_EXISTS</B
></TT
></DT
><DD
><P
>&#13;       仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。本标记是
       PHP 4.2.0 新加的。
      </P
></DD
><DT
><TT
CLASS="constant"
><B
>EXTR_REFS</B
></TT
></DT
><DD
><P
>&#13;       将变量作为引用提取。这有力地表明了导入的变量仍然引用了
       <CODE
CLASS="parameter"
>var_array</CODE
> 参数的值。可以单独使用这个标志或者在
       <CODE
CLASS="parameter"
>extract_type</CODE
> 中用 OR 与其它任何标志结合使用。本标记是
       PHP 4.3.0 新加的。
      </P
></DD
></DL
></DIV
>
  </P
><P
>&#13;   如果没有指定 <CODE
CLASS="parameter"
>extract_type</CODE
>,则被假定为 <TT
CLASS="constant"
><B
>EXTR_OVERWRITE</B
></TT
>。
  </P
><P
>&#13;   注意 <CODE
CLASS="parameter"
>prefix</CODE
> 仅在
   <CODE
CLASS="parameter"
>extract_type</CODE
> 的值是
   <TT
CLASS="constant"
><B
>EXTR_PREFIX_SAME</B
></TT
>,<TT
CLASS="constant"
><B
>EXTR_PREFIX_ALL</B
></TT
>,<TT
CLASS="constant"
><B
>EXTR_PREFIX_INVALID</B
></TT
>
   或 <TT
CLASS="constant"
><B
>EXTR_PREFIX_IF_EXISTS</B
></TT
>
   时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。前缀和数组键名之间会自动加上一个下划线。
  </P
><P
>&#13;   <B
CLASS="function"
>extract()</B
> 返回成功导入到符号表中的变量数目。
  </P
><DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>警告</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;    不要对不能信任的数据使用
    <B
CLASS="function"
>extract()</B
>,例如用户的输入($_GET,...)。如果这样做,举例说,要临时运行依赖于
    <A
HREF="security.globals.html"
>register_globals</A
>
    的老代码,要确保使用不会覆盖的
    <CODE
CLASS="parameter"
>extract_type</CODE
> 值,例如
    <TT
CLASS="constant"
><B
>EXTR_SKIP</B
></TT
>,并且要留意应该按照
    <A
HREF="ini.html"
><TT
CLASS="filename"
>php.ini</TT
></A
>
    中由 <A
HREF="ini.core.html#ini.variables-order"
>variables_order</A
>
    定义的顺序来提取。
   </P
></TD
></TR
></TABLE
></DIV
><P
>&#13;   <B
CLASS="function"
>extract()</B
> 的一种可能用法是将 <A
HREF="function.wddx-deserialize.html"
><B
CLASS="function"
>wddx_deserialize()</B
></A
>
   返回的结合数组中的内容导入到符号表变量中去。
  </P
><P
>&#13;   <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN13016"
></A
><P
><B
>例 1. <B
CLASS="function"
>extract()</B
> 例子</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /><br /></font><font color="#FF8000">/* 假定 $var_array 是 wddx_deserialize 返回的数组*/<br /><br /></font><font color="#0000BB">$size </font><font color="#007700">= </font><font color="#DD0000">"large"</font><font color="#007700">;<br /></font><font color="#0000BB">$var_array </font><font color="#007700">= array(</font><font color="#DD0000">"color" </font><font color="#007700">=&gt; </font><font color="#DD0000">"blue"</font><font color="#007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"size"&nbsp;&nbsp;</font><font color="#007700">=&gt; </font><font color="#DD0000">"medium"</font><font color="#007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"shape" </font><font color="#007700">=&gt; </font><font color="#DD0000">"sphere"</font><font color="#007700">);<br /></font><font color="#0000BB">extract</font><font color="#007700">(</font><font color="#0000BB">$var_array</font><font color="#007700">, </font><font color="#0000BB">EXTR_PREFIX_SAME</font><font color="#007700">, </font><font color="#DD0000">"wddx"</font><font color="#007700">);<br /><br />echo </font><font color="#DD0000">"$color, $size, $shape, $wddx_size</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br /><br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
>上例将输出:</P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>blue, large, sphere, medium</PRE
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
  </P
><P
>&#13;   <CODE
CLASS="varname"
>$size</CODE
> 没有被覆盖,因为指定了
   <TT
CLASS="constant"
><B
>EXTR_PREFIX_SAME</B
></TT
>,这使得 <CODE
CLASS="varname"
>$wddx_size</CODE
>
   被建立。如果指定了 <TT
CLASS="constant"
><B
>EXTR_SKIP</B
></TT
>,则 $wddx_size
   也不会被建立。<TT
CLASS="constant"
><B
>EXTR_OVERWRITE</B
></TT
> 将使 <CODE
CLASS="varname"
>$size</CODE
>
   的值为“medium”,<TT
CLASS="constant"
><B
>EXTR_PREFIX_ALL</B
></TT
> 将建立新变量
   <CODE
CLASS="varname"
>$wddx_color</CODE
>,<CODE
CLASS="varname"
>$wddx_size</CODE
> 和
   <CODE
CLASS="varname"
>$wddx_shape</CODE
>。
  </P
><P
>&#13;   必须使用关联数组,数字索引的数组将不会产生结果,除非用了
   <TT
CLASS="constant"
><B
>EXTR_PREFIX_ALL</B
></TT
> 或者 <TT
CLASS="constant"
><B
>EXTR_PREFIX_INVALID</B
></TT
>。
  </P
><P
>&#13;   参见 <A
HREF="function.compact.html"
><B
CLASS="function"
>compact()</B
></A
>。
  </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="function.end.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>起始页</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="function.in-array.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>end</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="ref.array.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>in_array</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>