PHP - extract
PHP -> Funkcie -> Array funkcie -> PHP - extract
Syntax
int extract ( array var_array [, int extract_type [, string prefix] ] )
Popis
Príkaz jazyka PHP
extract -- Importovať premenné z poľa do aktuálnej tabuľky symbolov
Táto funkcia sa používa na importovanie premenných z poľa do aktuálnej tabuľky symbolov. Berie si asociatívne pole var_array a spracováva kľúče ako názvy premenných a hodnoty ako hodnoty premenných. Pre každý pár kľúčov/hodnôt vytvorí premennú v aktuálnej tabuľke symbolov, vzhľadom na parametre extract_type a prefix.
Poznámka: Počínajúc verziou 4.0.5, táto funkcia vracia počet vyňatých premenných.
Poznámka: EXTR_IF_EXISTS a EXTR_PREFIX_IF_EXISTS boli predstavené vo verzii 4.2.0.
Poznámka: EXTR_REFS bol predstavený vo verzii 4.3.0.
extract() kontroluje každý kľúč, či má platný názov premennej. Tiež kontroluje kolízie s existujúcimi premennými v tabuľke symbolov. Spôsob, akým sa neplatné/číselné kľúče a kolízie spracovávajú, je určený extract_type. Môže byť jednou z následujúcich hodnôt:
EXTR_OVERWRITE
Ak existuje kolízia, prepísať existujúcu premennú.
EXTR_SKIP
Ak existuje kolízia, neprepísať existujúci premennú.
EXTR_PREFIX_SAME
Ak existuje kolízia, predradiť názov premennej s prefixom.
EXTR_PREFIX_ALL
Predradiť všetky názvy premenných s prefix. Počínajúc PHP 4.0.5, toto zahŕňa aj číselné premenné.
EXTR_PREFIX_INVALID
Predradiť iba neplatné/číselné názvy premenných s prefixom. Tento indikátor bol pridaný v PHP 4.0.5.
EXTR_IF_EXISTS
Iba prepísať premennú, ak už existuje v aktuálnej tabuľke symbolov, inak neurobiť nič. Toto je užitočné pre difinovanie zoznamu platných premenných a následné vyňatie iba tých premenných, ktoré ste na príklad zadefinovali z $_REQUEST. Tento indikátor bol pridaný v PHP 4.2.0.
EXTR_PREFIX_IF_EXISTS
Ak v akutálnej tabuľke symbolov existuje nepredradená verzia rovnakej premennej, vytvoriť len predradené názvy premenných. Tento indikátor bol pridaný v PHP 4.2.0.
EXTR_REFS
Vyníma premenné ako odkazy. Efektivita je v tom, že hodnoty importovaných premenných sa stále odkazujú na hodnoty parametra var_array. Tento indikátor môžte použiť ako samostatný alebo kombinovať ho s inýn indikátorom pomocou logického súčtu s extract_type. Tento indikátor bol pridaný v PHP 4.3.0.
Ak extract_type nie je špecifikovaný, usudzuje sa ako EXTR_OVERWRITE.
prefix sa vyžaduje iba ak extract_type je EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID alebo EXTR_PREFIX_IF_EXISTS. Ak predradený výsledok nie je platným názvom premennej, neimportuje sa do tabuľky do symbolov.
extract vracia počet premenných úspešne importovaných do tabuľky symbolov.
Možným využitím pre extract je importovanie premenných nachádzajúcich sa v asociatívnom poli, vrátených pomocou wddx_deserialize, do tabuľky symbolov.
Varovanie
Nepoužívajte extract na nedôverčivé dáta, ako užívateľský vstup ($_GET, ...). Ak tak urobíte, tak napr. ak chcete spustiť starý kód, ktorý sa dočasne spolieha na register_globals, uistite sa, či používate jednu z neprepisujúcich extract_type hodnôt ako EXTR_SKIP, a pozor na to, že teraz by ste mali extract-ovať $_SERVER, $_SESSION, $_COOKIE, $_POST a $_GET v tom poradí.
Príklad
<?php
/* Predpokladajme, že $var_array je pole vrátené z
wddx_deserialize */
$velkost = "velka";
$prem_pole = array ("farba" => "modra",
"velkost" => "stredna",
"tvar" => "gula");
extract($prem_pole, EXTR_PREFIX_SAME, "wddx");
echo "$farba, $velkost, $tvar, $wddx_velkost\n";
//Výsledkom bude modra, velkost, gula, stredna
?>
/* Predpokladajme, že $var_array je pole vrátené z
wddx_deserialize */
$velkost = "velka";
$prem_pole = array ("farba" => "modra",
"velkost" => "stredna",
"tvar" => "gula");
extract($prem_pole, EXTR_PREFIX_SAME, "wddx");
echo "$farba, $velkost, $tvar, $wddx_velkost\n";
//Výsledkom bude modra, velkost, gula, stredna
?>
$velkost nebola prepísaná, pretože sme neurčili EXTR_PREFIX_SAME, ktorý indikoval, že bol vytvorený v $wddx_velkost. Ak by sa špecifikoval EXTR_SKIP, potom by sa $wddx_velkost dokonca ani nevytvoril. EXTR_OVERWRITE by spôsobil, že by $velkost mala hodnotu "stredna" a z EXTR_PREFIX_ALL by plynulo, že sa nazýva $wddx_farba, $wddx_velkost a $wddx_tvar.
Musíte použiť asociatívne pole, číselne indexované pole by nevyprodukovalo výsledky, ak by ste nepoužili EXTR_PREFIX_ALL alebo EXTR_PREFIX_INVALID.
Pozri aj
compact