2012-02-21 9 views
7

PHP ekstraktu funkcji konwertujący tablicę jak poniżej:zmienne php tablicy - przeciwieństwo "wyciąg"

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

do:

$var1 = 1; 
$var2 = 2; 

Teraz trzeba odwrotnie, i mają kilka zmiennych:

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

że musi być:

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

Czy jest coś takiego w PHP?

+1

jeśli są one zakres globalny, masz już go w '$ GLOBALS [ 'test']. $ GLOBALS ['var3'] '[referencje $' GLOBALS'] (http://us3.php.net/manual/en/reserved.variables.globals.php) –

+3

Mówi 'compact' na stronie [manuala dla 'extract'] (http://php.net/extract). Dlaczego jej nie znalazłeś? – Gordon

+0

Poprawną odpowiedzią byłoby "utwórz klasę zawierającą właściwości var3, test i datax", ale niestety w perspektywie SO, która nie będzie odpowiedzią na twoje pytanie. – CodeCaster

Odpowiedz

1

Musiałbyś być naprawdę pewno chcieliśmy to zrobić (nie obejmuje rzeczy w zakresie globalnym automatycznie), ale można użyć

$my_vars = get_defined_vars(); 

Jeśli chcesz, aby był bardziej selektywny, możesz filtrować go w następujący sposób:

$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

Istnieje już wbudowana funkcja o nazwie 'paczka' – ThiefMaster

+0

Cholera PHP. Zmieniono nazwę :) – Joe

+0

Wewnątrz funkcji get_defined_vars() zwraca tylko te zmienne, które są dostępne w funkcji. Użyłem ram wcześniej, które oczekują, że tablica zostanie zwrócona z kontrolera. Ta funkcja jest przydatna. Pamiętaj, aby odłączyć wszelkie niechciane zmienne przed użyciem - takie jak zestaw wyników bazy danych. –

3

jak ten

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