(PHP 4, PHP 5, PHP 7)
extract — Importar variables a la tabla de símbolos actual desde un array
&$array
   [, int $flags = EXTR_OVERWRITE
   [, string $prefix = NULL
  ]] ) : intImporta variables desde un array a la tabla de símbolos actual.
Comprueba cada clave para ver si tiene un nombre de variable válido. También comprueba las colisiones con las variables existentes en la tabla de símbolos.
array
       Un array asociativo. Esta función trata a las claves como nombres de variables y
       a los valores como valores de variables. Por cada par clave/valor creará una
       variable en la tabla de símbolos actual, sujeta a los 
       parámetros flags y prefix.
      
       Se debe usar un array asociativo; un array indexado numéricamente
       no producirá resultados a menos que se use EXTR_PREFIX_ALL o
       EXTR_PREFIX_INVALID.
      
flags
       La manera en que las claves no-válidas/numéricas y las colisiones son tratadas está determinda
       por el parámetro flags. Puede ser uno de los
       valores siguientes:
       
EXTR_OVERWRITEEXTR_SKIPEXTR_PREFIX_SAMEprefix.
          
         EXTR_PREFIX_ALLprefix.
          
         EXTR_PREFIX_INVALIDprefix.
          
         EXTR_IF_EXISTSEXTR_PREFIX_IF_EXISTSEXTR_REFSarray. Se puede usar esta bandera
           por sí misma o combinarla con cualquier otra bandera usando el operador OR en
           flags.
          
         
       Si no se especifica flags, se asume
       que es EXTR_OVERWRITE.
      
prefix
       Observe que prefix sólo es requerido si
       flags es EXTR_PREFIX_SAME,
       EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID
       o EXTR_PREFIX_IF_EXISTS. Si
       el resultado prefijado no es un nombre de variable válido, ésta no es
       importada a la tabla de símbolos actual. Los prefijos son separados de las
       claves del array mediante un caracter de subrayado.
      
Devuelve el número de variables importadas con éxito a la tabla de símbolos.
Ejemplo #1 Ejemplo de extract()
Un posible uso de extract() es importar a la tabla de símbolos las variables contenidas en un array asociativo devuelto por wddx_deserialize().
<?php
/* Se supone que $var_array es un array devuelto desde
   wddx_deserialize */
$tamaño = "grande";
$var_array = array("color" => "azul",
                   "tamaño"  => "medio",
                   "forma" => "esfera");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $tamaño, $forma, $wddx_tamaño\n";
?>
El resultado del ejemplo sería:
azul, grande, esfera, medio
     El $tamaño no se ha sobrescrito ya que se especificó
     EXTR_PREFIX_SAME, lo que resulta en
     la creación de $wddx_tamaño. Si se hubiera especificado
     EXTR_SKIP, $wddx_tamaño no se habría creado.
     EXTR_OVERWRITE causaría que $tamaño tuviera
     el valor "medio", y EXTR_PREFIX_ALL resultaría en variables nuevas
     llamadas $wddx_color,
     $wddx_tamaño, y
     $wddx_forma.
    
    No use extract() en datos que no son de confianza, como
    las entradas de usuario
    (esto es, $_GET, $_FILES, etc.).
    Si lo hace, por ejemplo si quiere ejecutar temporalmente código antiguo que
    dependía de register_globals
    temporalmente, asegúrese de usar uno de los valores de
    flags que no sobrescriban, como
    EXTR_SKIP, y sepa que debería realizar la extracción
    en el mismo orden que fue definido en
    variables_order dentro de
    php.ini.
   
Nota:
Si aún tiene register_globals y está activado, si utiliza extract() en $_FILES y especifica
EXTR_SKIP, puede obtener resutados no deseados.AdvertenciaEsto es una práctica no recomendada y sólo está documentada aquí por razones de complementación. El uso de register_globals está obsoleto y las llamadas a extract() en información que no es de confianza tal como $_FILES es, como se observó arriba, un riesgo potencial de seguridad. Si se encuentra con esto, significa que está usando al menos dos malas prácticas de código.
Se esperaría ver algo como lo siguiente:<?php
/* Se supone que $archivoprueba es el nombre de una entrada de subida de archivo
y que register_globals está activado. */
var_dump($archivoprueba);
extract($_FILES, EXTR_SKIP);
var_dump($archivoprueba);
var_dump($archivoprueba['tmp_name']);
?>Sin embargo, en su lugar se ve algo como esto:string(14) "/tmp/phpgCCPX8" array(5) { ["name"]=> string(10) "somefile.txt" ["type"]=> string(24) "application/octet-stream" ["tmp_name"]=> string(14) "/tmp/phpgCCPX8" ["error"]=> int(0) ["size"]=> int(4208) } string(14) "/tmp/phpgCCPX8"string(14) "/tmp/phpgCCPX8" string(14) "/tmp/phpgCCPX8" string(1) "/"Esto es a causa del hecho de que, ya que register_globals está activado, $archivoprueba ya existe en el ámbito global cuando se llamó a extract(). Y ya que
EXTR_SKIPestá especificado, $archivoprueba no es sobrescrito con el contenido del array$_FILESpor lo que $archivoprueba permanece como cadena. Ya que a las cadenas se puede acceder usando la sintaxis de array y la cadena no numérica tmp_name es interpretada como 0, PHP ve $archivoprueba['tmp_name'] como $archivoprueba[0].