2012-02-21 11 views
7

PHP tiene un extracto de la función que convierte una matriz de esta manera:php variables a Array - opuesto a "extraer"

$array = array(
'var1' => 1, 
'var2' => 2 
); 

a:

$var1 = 1; 
$var2 = 2; 

Ahora, necesito lo contrario, i tienen pocas variables:

$var3 = 'test'; 
$test = 'another'; 
$datax = 1; 

que necesita ser:

$array = array(
'var3' => 'test', 
'test' => 'another', 
'datax' => 1 
); 

¿Hay algo así en PHP?

+1

Si estos son de alcance global, ya lo tienes en '$ GLOBALS [ 'test']. $ GLOBALS ['var3'] '[' $ GLOBALS' reference] (http://us3.php.net/manual/en/reserved.variables.globals.php) –

+3

Dice 'compact' en la página [manual para 'extract'] (http://php.net/extract). ¿Por qué no lo encontraste? – Gordon

+0

La respuesta correcta sería "crear una clase que contenga las propiedades var3, test y datax", pero lamentablemente en la perspectiva de SO eso no será una respuesta a su pregunta. – CodeCaster

Respuesta

1

Habría que ser muy seguro de lo que quería hacer esto (que incluye cosas en el ámbito global de forma automática) pero se puede utilizar

$my_vars = get_defined_vars(); 

Si lo quieres más selectivo que eso, podrías mirar filtrándolo así:

$my_vars = pack_vars(get_defined_vars()) 

function pack_vars ($defined_vars) 
{ 
    $packed = array(); 
    $ignored = array('dont_use_this', 'ignored_var', 'ignore_this_too'); 

    foreach ($defined_vars AS $key => $value) 
    { 
     if (!in_array($key, $ignored)) 
     { 
      $packed[$key] = $value; 
     } 
    } 
    return $packed; 
} 
+0

Ya existe una función incorporada llamada 'paquete' – ThiefMaster

+0

Maldita PHP. Renombrado :) – Joe

+0

Dentro de una función get_defined_vars() devuelve solo aquellas variables disponibles en la función. He utilizado marcos anteriormente que esperan que se devuelva una matriz desde el controlador. Esta función es útil. Recuerde desarmar cualquier variable no deseada antes de usarla, como un conjunto de resultados de la base de datos. –

3

como esto

$preDefined = (get_defined_vars()); 
$var3 = 'test'; 
$test = 'another'; 
$datax = "1"; 
$newDefined = array_diff(get_defined_vars(), $preDefined); 
print_r($newDefined);