| 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: 17 let
|
|||
0