Autor | Zpráva | ||
---|---|---|---|
jansfabik Profil |
#1 · Zasláno: 16. 7. 2008, 16:13:04 · Upravil/a: jansfabik
Dobrý den,
řeším jeden problém s php. Potřeboval bych vědět jestli neexistuje fce, která by mi našla ve vícerozměrném poli položku podle zadaných klíčů. Zdrojový kód lepší pochopení: global $lang; $lang = array (); $lang ['administrace'] = array ( 0 => 'Administrace', 'menu' => array ( 0 => 'Menu', 'system' => 'Správa systému' ) ); function lang () { global $lang; $args = func_get_args (); ... tady potřebuji pomoc ... } Příklad: lang ('administrace', 'menu') vrátí 'Menu' lang ('administrace', 'menu', 'system) vrátí 'Správa systému' |
||
Radim Hejhal Profil |
#2 · Zasláno: 16. 7. 2008, 22:31:45 · Upravil/a: Radim Hejhal
Zdravím, jeslti jsem to dobře pochopil, mělo by to jít naprosto jednoduše:
$lang['administrace']['menu'][0] $lang['administrace']['menu']['system'] Tzn. že žádná funkce na to není třeba, pokud jsou známé klíče. |
||
Časová prodleva: 5 dní
|
|||
jansfabik Profil |
#3 · Zasláno: 21. 7. 2008, 13:12:43 · Upravil/a: jansfabik
to je sice pravda, ale pak je tam problém s tou globální proměnnou, a to je potom hodně dlouhý kód, a je to nepřehledné:
$GLOBALS['lang']['administrace']['menu']['system'] a navíc mě napadlo, že bych to potom ještě časem rozšířil nějak takhle: $lang = array ( 'en' => array (...), 'cz' => array (...) ); $currentLang = 'cz'; a to by bylo už hodně nepřehledné tak jsem to vyřešil takto: function lang () { global $lang; $args = func_get_args (); if (!$args) { return NULL; } $count = coun ($args); $result = $lang; for ($i = 0; $i < $count; $i ++) { $result = $result [$args [$i]]; } if (is_array ($result)) { $result = $result [0]; } return $result; ale zdá se mi, že to bude pomalé, nevíte někdo, jestli to nejde vyřešit nějak lépe, třeba přesunováním ukazatele? |
||
tiso Profil |
#4 · Zasláno: 21. 7. 2008, 14:18:50
jansfabik - ak potrebuješ iba časť poľa, tak že ho prekopíruješ:
$lang=array(...)//tvoje dlhe pole, obsahuje napriklad polozku $lang['en']['admin']['nav']['system']='blabla' ... $copy_nav=$lang['en']['admin']['nav'];// teraz je ta polozka v $copy_nav['system'] Ďalšia možnosť je použiť oddelené polia (napríklad pre jazykové verzie), ušetríš si jeden rozmer: $lang='en';//jazyk ktory chcem pouzit (mozem ho ziskat s url, cookie, ...) include $lang.'.inc.php'; //obsahuje len anglicke nazvy |
||
jansfabik Profil |
#5 · Zasláno: 21. 7. 2008, 20:57:48
tiso děkuji za radu, to mi stačí
Ďalšia možnosť je použiť oddelené polia (napríklad pre jazykové verzie), ušetríš si jeden rozmer: $lang='en';//jazyk ktory chcem pouzit (mozem ho ziskat s url, cookie, ...) include $lang.'.inc.php'; //obsahuje len anglicke nazvy mám je v několika souborech, ale protože by to dělalo při výpisu jazyků pro volbu jazykové verze problémy (v každém souboru je i informace o názvu jazyka a jeho vlajka v base64), tak jsem to udělal trošku jinak: $GLOBALS ['lang_'.$lang] děkuji za pomoc |
||
Časová prodleva: 16 let
|
0