2012-02-21 15 views
7

PHP ha un estratto di funzione che convertirà un array come questo:variabili php per serie - opposto di "estrarre"

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

a:

$var1 = 1; 
$var2 = 2; 

ora, ho bisogno il contrario, i hanno alcune variabili:

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

che deve essere:

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

C'è qualcosa di simile in PHP?

+1

Se questi sono portata globale, è già in possesso in '$ GLOBALS [ 'test']. $ GLOBALS ['var3'] '[' $ GLOBALS' reference] (http://us3.php.net/manual/en/reserved.variables.globals.php) –

+3

Dice 'compact' proprio sulla [pagina di manuale per 'extract'] (http://php.net/extract). Perché non l'hai trovato? – Gordon

+0

La risposta corretta sarebbe "creare una classe contenente le proprietà var3, test e datax", ma sfortunatamente in prospettiva SO che non sarà una risposta alla tua domanda. – CodeCaster

risposta

16

È possibile utilizzare compact() per raggiungere questo obiettivo.

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

Riferimento: http://php.net/manual/en/function.compact.php

+1

oh grazie mille, non l'avrei mai indovinato – EscoMaji

1

Dovreste essere davvero sicuri si voleva fare questo (che comprende le cose in ambito globale automaticamente), ma è possibile utilizzare

$my_vars = get_defined_vars(); 

Se lo vuoi più selettivo, puoi guardare il filtro in questo modo:

$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

C'è già una funzione integrata chiamata 'pack' – ThiefMaster

+0

Dannato PHP. Rinominato :) – Joe

+0

All'interno di una funzione get_defined_vars() restituisce solo quelle variabili disponibili nella funzione. Ho usato framework in precedenza che prevedono la restituzione di un array dal controller. Questa funzione è utile. Ricordarsi di rimuovere qualsiasi variabile indesiderata prima di utilizzarla, ad esempio un set di risultati del database. –

3

come questo

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